gis*_*ard 9 c macos gcc shared-libraries clang
源文件
rsetti::fastidio { /tmp }-> cat foo.c
#include <stdio.h>
void ACFunction() {
printf("ACFunction()\n");
AGoFunction();
}
Run Code Online (Sandbox Code Playgroud)
编译共享库
rsetti::fastidio { /tmp }-> clang -shared -o libfoo.so foo.c
foo.c:4:3: warning: implicit declaration of function 'AGoFunction' is invalid in C99 [-Wimplicit-function-declaration]
AGoFunction();
^
1 warning generated.
Undefined symbols for architecture x86_64:
"_AGoFunction", referenced from:
_ACFunction in foo-lFDQ4g.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
rsetti::fastidio { /tmp }->
Run Code Online (Sandbox Code Playgroud)
linux + gcc上的相同代码可以轻松编译.
gis*_*ard 24
通过使用:
-Wl,-undefined -Wl,dynamic_lookup
Run Code Online (Sandbox Code Playgroud)
要么
clang -shared -undefined dynamic_lookup -o libfoo.so foo.c
Run Code Online (Sandbox Code Playgroud)
似乎保持了GCC的相同行为.