我该如何指定clang静态链接某个库(在我这里是SDL2),并动态链接标准库?
使用
使用
-static
不好,因为链接器也会尝试静态链接标准库,而这在OSX中是禁止的。另一方面,clang不知道-Wl,-Bstatic
。-static
不好,因为链接器也会尝试静态链接标准库,而这在OSX中是禁止的。另一方面,clang不知道-Wl,-Bstatic
。./MyStaticLibs
中,然后简单地使用-L./MyStaticLibs/ -l<StaticLibraryName>
。random.dylib
)和静态库(random.a
)在同一个目录中,则编译器会优先链接.dylib
而不是.a
。-L
和用于库名称的-l
。-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}
-hidden-l
,这会防止我在没有-l
的情况下指定路径 - 你知道你提出的方法是否仍然是2022年唯一的方法吗? - mmomtchev
-l
参数将库传递给Clang时,如果存在.dylib
文件,链接器将始终选择它而不是.a
文件。这是Apple已知的一个错误。您可以通过向库路径添加一个带有库副本(或链接)的虚拟目录来解决此问题。 - zneak