【发布时间】:2011-12-14 16:12:42
【问题描述】:
哦,我是 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
我用谷歌搜索了这个信息,但我不能很好地理解结果,我想知道这个符号是什么意思,为什么很多程序都有这个链接错误。我也想知道这个错误的可能原因是什么,链接命令是:
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
【问题讨论】:
-
您不需要明确地与
-lstdc++链接,g++ 应该自己选择正确的。尝试删除它。 -
我尝试从“DeepLearning4j 示例”项目和行“DataSetIterator iterator = new RecordReaderDataSetIterator(recordReader,batchSize,labelIndex,numClasses); logger.info("test point 3."); 之后启动 CSVExample数据集 allData = iterator.next();"收到:“dyld:惰性符号绑定失败:找不到符号:___emutls_get_address 引用自:/Users/firstname/.javacpp/cache/nd4j-native-1.0.0-beta5-macosx-x86_64.jar/org/nd4j/nativeblas/ macosx-x86_64/libnd4jcpu.dylib 预期在:/usr/lib/libSystem.B.dylib" 在 macOS 10.15 和 OpenJDK 运行时环境 build 14...
-
...并升级到 Xcode 版本 11.1 11A11027。
-
将org.deeplearning4j的版本从1.0.0-beta5升级到1.0.0-beta6后就ok了。
标签: macos gcc linker undefined-symbol