交叉编译时compile和link可以使用不同的编译器吗?

Can compile and link use different compilers when cross-compile?

我想知道是否可以使用不同的编译器进行编译和 link。

例如,我有两个文件,a.c 和 b.c, 我使用 clang 来编译 a.c 和 b.c:

clang -c a.c -o a.o
clang -c b.c -o b.o

然后用gcc将link这两个.o文件作为so库:

gcc -lm -lz -shared a.o b.o -o libad.so

生成so文件成功,但是使用这个库会崩溃

更新: 更详细的信息:我所做的是交叉编译,目标平台是 armv7a.I 使用 android-NDK 并在 MAC.So 上编译代码 gcc 是 arm-linux -androideabi-gcc 和 clang 是 arm-linux-androideabi-clang.

除非在 link 时间 (-fuse-ld=xxx[1][2]) 指定了特殊标志,否则 clang 和 gcc 都会调用默认系统 linker(在 macOS 上是lld 并且在 linux 上可能会是 gold)。因此 运行 使用 gcc 或 clang 的第二个语句将生成相同的 linked 二进制文件。

[1] https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

[2] http://clang-developers.42468.n3.nabble.com/LLD-to-be-the-default-linker-in-Clang-td4053949.html