我正在开发一个必须在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
答案 0 :(得分:1)
这是对解决方法的猜测:尝试使用-fno-common标志构建库。如果您对此变量有多个定义,则需要将“extern”添加到除一个之外的所有变量。
答案 1 :(得分:0)
请注意以下是一个猜测,除非你提供你正在使用的确切编译器标志,否则我不能肯定地说 - 但是Xcode默认设置-fvisibility=hidden
,这几乎可以隐藏库中的任何符号,除非它被声明为可见。
您可以在Linux上执行相同的操作,但GCC的默认设置是不隐藏符号。
您可以在此处找到更多信息: http://gcc.gnu.org/wiki/Visibility