[英]LD_PRELOAD and thread local variable
我有一個共享庫(libtest.cpp)和一個簡單的程序(test.cpp)。 我希望他們共享一個線程局部變量gVar 。 共享庫通過LD_PRELOAD鏈接。
這是我的共享庫libtest.cpp的代碼:
#include<stdio.h>
__thread int gVar;
void print_gVar(){
printf("%d\n", gVar);
}
下面是test.cpp的代碼。
#include<stdio.h>
__thread int gVar;
void __attribute__((weak)) print_gVar();
int main(){
gVar = 10;
print_gVar();
return 0;
}
我使用以下腳本來編譯和運行它們。
g++ -g -shared -fPIC -olibtest.so libtest.cpp
g++ -g -fPIC -o test test.cpp
LD_PRELOAD=./libtest.so ./test
預期的結果是10,因為test.cpp中的賦值將影響libtest.cpp中的gVar。 但是,我只得到0.似乎libtest.cpp中的gVar和test.cpp中的gVar沒有鏈接。
我做了一些額外的測試:
如果我將__attribute__((weak))
到任何文件中的gVar
聲明中,則輸出仍為0。
如果我從兩個文件中刪除__thread
,則結果為10(成功)。
如果我將gVar
中的extern
和__attribute__((weak))
添加到gVar
的聲明中,則會出現分段錯誤。
我想LD_PRELOAD
和__thread
一定有問題。 但我無法弄清楚。
誰能告訴我如何讓它發揮作用? 非常感謝你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.