我在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
中使用的库和特定库的路径。有人知道为什么我不需要在第一种情况下但需要在第二种情况下?
答案 0 :(得分:1)
使用默认选项的链接器在Linux和OSX上的行为不同。要使OSX链接的行为更像您在Linux上的预期,请使用以下链接标志。
-Wl,-undefined,dynamic_lookup