亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 在 SCO 系統(tǒng)的 CC 編譯器上強(qiáng)制使用靜態(tài)鏈接庫或者是動態(tài)鏈接庫。 [打印本頁]

作者: snow888    時間: 2011-11-26 10:10
標(biāo)題: 在 SCO 系統(tǒng)的 CC 編譯器上強(qiáng)制使用靜態(tài)鏈接庫或者是動態(tài)鏈接庫。
實驗如下:

同時編寫三個源碼文件

hello.c
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int main ( void )
  5. {
  6.         hello1();
  7.         hello2();
  8.         return 0;
  9. }
復(fù)制代碼
hello1.c
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void hello1()
  4. {
  5.        printf("hello , i am hello1\n");
  6.        return;
  7. }
復(fù)制代碼
hello2.c
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void hello2()
  4. {
  5.        printf("hello , i am hello2\n");
  6.        return;
  7. }
復(fù)制代碼
先將 hello1.c 和 hello2.c 編譯成動態(tài)鏈接庫 libhello.so
再將 hello1.c 和 hello2.c 編譯成靜態(tài)鏈接庫 libhello.a

如何編譯成動態(tài)庫和靜態(tài)庫,請搜索論壇 sco 版塊,記得 sunlan 老大曾發(fā)過一個帖子,不再重復(fù)敘述。

下面是關(guān)鍵的一步。

我們首先看看:

cc -o hello hello.o -L. -lhello

編譯會生成一個 hello 的可執(zhí)行文件,我們執(zhí)行一下看看,咦,咋提示找不到動態(tài)鏈接庫 libhello.so ?

進(jìn)行如下操作:

LD_LIBRARY_PATH=${LIBRARY_PATH}:/usr/work/src/test/
export LD_LIBRARY_PATH

再執(zhí)行一下看看? ./hello

OK , 程序順利的打出兩行。

由此可見,前面的編譯操作鏈接的是動態(tài)鏈接庫 libhello.so

我們再來執(zhí)行編譯操作
cc -dn -o hello hello.o -L. -lhello
編譯同樣會生成一個 hello 的可執(zhí)行文件。

清除 LD_LIBRARY_PATH 環(huán)境變量
unset LD_LIBRARY_PATH

set 一下看看,我們發(fā)現(xiàn)環(huán)境變量 LD_LIBRARY_PATH 已經(jīng)被清除了。

再次執(zhí)行一下看看 ./hello
程序順利打出兩行信息。

總結(jié):
在默認(rèn)情況下,cc 編譯成可執(zhí)行文件的時候,如果在 -L 指向的路徑下同時存在動態(tài)鏈接庫和靜態(tài)鏈接庫,系統(tǒng)默認(rèn)鏈接的是動態(tài)鏈接庫。
cc -o hello hello.o -L. -lhello 相當(dāng)于是 cc -dy -o hello hello.o -L. -lhello

如果強(qiáng)制編譯器鏈接靜態(tài)庫,應(yīng)使用 -dn 的參數(shù)
cc -dn -o hello hello.o -L. -lhello
作者: snow888    時間: 2011-11-26 10:25
順便說一下,如果是使用的 gcc 編譯器,那么對應(yīng)的編譯參數(shù)是

-shared 和 -static

切記,切記!
作者: sunlan    時間: 2011-12-02 16:11
另外還要注意-b參數(shù)。在默認(rèn)情況下,cc生成的目標(biāo)代碼是coff格式的,加-belf時,生成的目標(biāo)代碼是elf格式的。而gcc缺省生成的是elf格式的。兩種格式不能兼容
作者: snow888    時間: 2011-12-03 00:51
另外還要注意-b參數(shù)。在默認(rèn)情況下,cc生成的目標(biāo)代碼是coff格式的,加-belf時,生成的目標(biāo)代碼是elf格式的 ...
sunlan 發(fā)表于 2011-12-02 16:11



    嗯,這個還真實忽略了。

謝謝補(bǔ)充。




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2