1樓:澪同學
有個隱藏的坑你得小心。
現在你把你的庫 a.so 靜態鏈結到了 glibc 某個版本但是你可沒法保證用你庫的人是不是靜態鏈結,比如程式 b 用了你的 a.so 並且動態鏈結或者靜態鏈結了乙個不同的版本甚至不是gnu的libc實現,那問題就大了而且很難檢查出來。
2樓:高辰飛
找個libc.a試試,感覺可以啊
試了下//hello.c
#include "stdio.h"
int main()
yum install glibc-static
2. gcc -static hello.c -o hello
3. strace ./hello
[root@iz2zeic9ggky8iwdmhb3vsz ~]# strace ./hello
execve("./hello", ["./hello"], [/* 22 vars */]) = 0
uname({sysname="Linux", nodename="iz2zeic9ggky8iwdmhb3vszŔ
brk(NULL0x24a2000
brk(0x24a31c00x24a31c0
arch_prctl(ARCH_SET_FS, 0x24a2880) = 0
brk(0x24c41c00x24c41c0
brk(0x24c50000x24c5000
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 10
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe097df6000
write(1, "hello world!\n", 13hello world13
exit_group(0exited with 0 +++
完全沒有load任何so
3樓:程式碼之詩
這個,應該做不到,或者說,很難做到。因為 libc 的靜態版本並不與它的動態版本完全等價。
對於 hello world 這麼簡單的程式是可以的,象這樣:
gcc -static -o hello hello.c據說有除了 gnu libc 之外的其它 libc 庫,對 static link 比較友好的,這個就是按需取用了。
另外就是,大多數情況下,libc 的靜態鏈結恐怕會比動態版本載入更慢一些。你省下了重定位的時間,卻增加了載入時間——乙個是記憶體操作(libc 肯定早就載入到記憶體了嘛),另乙個卻常常是磁碟操作。
使用linux編譯執行c程式,假如定義乙個區域性變數,是程式執行中由作業系統開闢的空間呢?還是編譯過程?
唐浩然 編譯器是 規劃書 規劃 計畫使用量 作業系統是倉庫管理員,管 具體分配多少量 是否一次性完全分配 或 只分配當前所需 區域性變數在棧裡 只有函式呼叫的時候會分配棧空間,函式反回的時候吐出來這個應該是c規範來約束的,找本c語言的書認真看看。編譯器只是c spec的執行者 雲天明 woc讀錯題了...
關於labview通過動態鏈結庫得到乙個指標,怎麼獲取這個指標指向位址的值?
Scofield Gu 教程來了 過年正好有空自己也正在整理這個問題,因此我就在此分享一下吧。舉個例子,我們這裡說的就是這個minus 函式,希望得到int diff ptr 是diff的指標。我們通過解指標間接得到diff。但是有時候外部提供的dll是指標,需要我們再LV中自己解引用,那麼以下有三...
是否可能存在乙個動態平衡的世界,從而達到所有人共同富裕
身經百戰澤拉圖 您是不是在找 原始共產主義 當人類還在草原和叢林上烤篝火 獵猛獸的時候,也許還沒有什麼 貧富差距 如果是未來,則需要摒棄人類的 權力 才能共同富裕,任何人有權力支配他人,便能佔據優勢地位,則可能積累財富,形成差距。官僚系統帶來了官僚權力,市場經濟帶來了金錢權力,如何構建沒有它們的社會...