OSX:如何静态链接库并动态链接标准库?

时间:2016-05-04 21:35:40

标签: c++ macos clang static-linking

如何指定clang以静态链接某个库(在我的情况下为SDL2)并动态链接标准库?

使用-static并不好,因为链接器也试图静态链接标准库,这在OSX中是禁止的。另一方面,clang不知道-Wl,-Bstatic

2 个答案:

答案 0 :(得分:3)

将您的静态库放在dir import time def func(): obj = TestClass() obj.name = multiprocessing.current_process().name print obj.name, str(obj) time.sleep(1) print obj.name, str(obj) 中,然后只使用./MyStaticLibs

编译器更喜欢动态版本而不是静态版本的库

如果您的动态库(-L./MyStaticLibs/ -l<StaticLibraryName>)和静态库(random.dylib)位于同一目录中,则编译器会更喜欢并链接random.a而不是.dylib

答案 1 :(得分:2)

您只有几个选项:目录为-L,库名称为-l

您可以通过确保要链接的静态库的名称与动态库的命名方式不同,以最简单的方式执行此操作。否则,您可能会发现链接器通过名称和对那些的链接有用地收集对共享库的所有引用。这不是特定于OSX的问题,而是许多具有共享库的系统的共同特征。

当通常驻留在具有相同命名库的目录中时,确保拥有静态库的一种方法是构建到临时目录的符号链接,并使用 和{{ 1}}。

这样的事情:

-L