可以在Ubuntu中编译但不能在Mac OS X中编译

时间:2015-05-14 02:06:18

标签: c++ compilation

我在Ubuntu 12.04上构建了一个动态库(.so file)。我们称之为test.so。我有一个test.cpp文件,它调用了一些库函数。我首先将test.cpp编译为test.o

g++ test.cpp -o -c test.o

成功了。然后我将test.o编译为test.so

g++ -shared test.o -o test.so

也成功了。

我在Mac OS X上做了类似的事情。

我首先得到test.o

g++ test.cpp -o -c test.o

然后

g++ -dynamiclib test.o -o test.dylib

这失败了,因为我没有提供test.cpp中使用的库。我修改了它:

g++ -dynamiclib test.o -o test.dylib -L/path/to/libraries -lLibraryName

然后它有效。

请注意,对于第一种情况,我没有提供test.cpp中使用的库和特定库的路径。有人知道为什么我不需要在第一种情况下但需要在第二种情况下?

1 个答案:

答案 0 :(得分:1)

使用默认选项的链接器在Linux和OSX上的行为不同。要使OSX链接的行为更像您在Linux上的预期,请使用以下链接标志。

-Wl,-undefined,dynamic_lookup