Arc*_*lab 5 c++ macos clang static-linking
如何指定 clang 静态链接某个库(在我的情况下为 SDL2)并动态链接标准库?
使用-static不好,因为链接器也尝试静态链接标准库,这在 OSX 中是禁止的。另一方面,clang 不知道-Wl,-Bstatic。
您只有几个选项:-L目录和-l库名称。
您可以通过确保要链接的静态库的名称与动态库的名称不同来以最简单的方式完成此操作。否则,您可能会发现链接器有助于按名称收集对共享库的所有引用以及针对这些. 这不是 OSX 特有的问题,而是许多具有共享库的系统的常见功能。
当静态库通常驻留在具有同名库的目录中时,确保拥有静态库的一种方法是构建一个到临时目录的符号链接,并将其与-L.
像这样的东西:
MYDIR=$(mktemp -d -t xxxxxx)
ln -sf /usr/local/libfoo.a ${MYDIR}/libfoo.a
clang -o foo -L${MYDIR} -l foo
rm -rf ${MYDIR}
Run Code Online (Sandbox Code Playgroud)
将您的静态库放在 dir 中,./MyStaticLibs然后简单地使用-L./MyStaticLibs/ -l<StaticLibraryName>.
编译器更喜欢动态版本而不是静态版本的库
如果您的动态库 ( random.dylib) 和静态库 ( random.a) 位于同一目录中,那么编译器将首选并链接到.dylibnot.a
| 归档时间: |
|
| 查看次数: |
9453 次 |
| 最近记录: |