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

Can compile in Ubuntu but not in Mac OS X

我在 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 中使用的库和特定库的路径。有人知道为什么我在第一种情况下不需要但在第二种情况下需要吗?

具有默认选项的 linker 在 Linux 和 OSX 上的行为不同。要使 OSX link 的行为更像您在 linux 上的预期,请使用以下 link 标志。

-Wl,-undefined,dynamic_lookup