OSX:如何静态链接库和动态链接标准库
OSX: How to statically link a library and dynamically link the standard library?
如何指定clang静态链接某个库(在我的例子中是SDL2)并动态链接标准库?
使用-static
是不好的,因为链接器也试图静态链接标准库,这在OSX中是被禁止的。另一方面,clang不知道-Wl,-Bstatic
。
将静态库放在目录./MyStaticLibs
中,然后简单地使用-L./MyStaticLibs/ -l<StaticLibraryName>
。
编译器更喜欢动态版本而不是静态版本的库
如果您的动态库(random.dylib
)和静态库(random.a
)在同一目录中,则编译器将更喜欢并链接.dylib
而不是.a
您只有两个选项:-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}
相关文章:
- g++用户定义的动态链接库上的全局new和delete运算符
- 如何使用C++导出制作动态链接库
- 链接 c++ 动态库一直失败
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 动态链接库中C++回调函数
- 如果同时存在共享库和动态库,则链接器将首选哪个库?
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 如何动态链接 grpc 库 c++?
- 如何在Windows上链接动态构建的cmake文件
- 当我链接动态库而不是静态库时,CMake 有效
- 在MacOS上使用Bazel链接动态库
- 链接动态库
- 链接动态和静态库 RCPP
- Windows C++Eclipse MinGW链接动态和静态库
- 如何根据另一个动态库链接动态库
- 从另一个 dll 链接动态 dll 会导致错误
- 链接动态库时出错.所以使用Lua
- G++:链接动态(dylib)库
- Qt - 帮助链接动态库