【发布时间】:2009-05-05 15:07:00
【问题描述】:
我正在开发一个必须在 linux 和 mac os X 上编译的库。到目前为止,我没有遇到任何问题,使用“-g”编译在两种操作系统下都运行良好。
我尝试通过一些优化(“-O2”)进行编译,它在 linux 下运行良好,但是当我尝试在 mac os X 下将程序与我的库链接时,我得到了一个未定义的符号。
有人知道我应该寻找什么吗?
nm mylib.a | grep _the_symbol
这对于 linux 和 mac 返回相同的内容(在 linux 下没有前导下划线):
154:00000018 C _the_symbol
377: U _the_symbol
下面是使用该库的程序在linux下的编译行:
/usr/bin/gcc -std=c99 CMakeFiles/prod-cons.dir/prod-cons.c.o -o prod-cons -rdynamic -L/home/claferri/dev/build/src ../src/libckaapi.a -lpthread -Wl,-rpath,/home/claferri/dev/build/src
在mac下:
/usr/bin/gcc -std=c99 -Wl,-search_paths_first -headerpad_max_install_names -fPIC CMakeFiles/prod-cons.dir/prod-cons.c.o -o prod-cons -L/Volumes/Data/claferri/Work/build/src ../src/libckaapi.a /usr/lib/libpthread.dylib
【问题讨论】:
-
你是说 Mac 版本的 nm 会给出链接器错误,表明库包含符号?
-
是的!我对正在发生的事情一无所知。
-
你的源代码中是否出现“_the_symbol”,它是一个未初始化的全局变量吗?是否在您的源代码中被引用?
-
它出现在库源代码中(但不在使用该库的程序中),它是一个未初始化的全局变量。
-
@Neil : 没关系,这个符号也出现在 linux 下(但没有前导下划线)