可以在 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
我在 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