Jus*_*Try 8 macos linker gcc undefined-symbol
哦,我是GCC和MAC和Makefile的新手.今天我打算使用MAC OS X和GCC 4.4.2构建一个动态库,但是当链接.o文件时,编译器抱怨如下:
Undefined symbols:
"___emutls_get_address", referenced from:
_malloc in michael.o
_malloc in michael.o
ld: symbol(s) not found
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索了这个信息,但我无法理解结果,我想知道这个符号是什么意思,以及为什么很多程序都有这个链接错误.我也想知道这个错误的可能原因是什么,链接命令是:
g++ -Dx86 -D_GNU_SOURCE -D_REENTRANT -Wall -m32 \
-fno-strict-aliasing -fno-pic -O3 -ggdb \
michael.o malloc_new.o -o libmichael.so \
-lpthread -lm -lstdc++ -shared
Run Code Online (Sandbox Code Playgroud)
此符号是gcc for Mac Os X的TLS(线程局部存储)仿真的一部分.gcc bugzilla中有一些关于此的错误,例如:http://gcc.gnu.org/bugzilla/show_bug.cgi?id = 39888
在Darwin上使用线程本地存储(例如OpenMP ThreadPrivate变量)需要通过-lgcc_s.so.1或-lgcc_eh手动链接到TLS emutls
请参阅主题:http : //gcc.gnu.org/ml/gcc/2008-12/msg00145.html http://gcc.gnu.org/ml/gcc/2008-12/msg00107.html
从上面的话题来看,这显然是一团糟.但是,正如我刚才所说,我希望有一个跟踪问题的bug是有用的.
...
如果我手动链接到gcc_s.so.1或gcc_eh如上所述,TLS工作正常.
因此,可能的解决方案之一是添加 -lgcc_s.so.1或-lgcc_eh选择链接步骤.另一个是更新你的gcc,因为这是gcc的bug.
| 归档时间: |
|
| 查看次数: |
6389 次 |
| 最近记录: |