交叉编译时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
我想知道是否可以使用不同的编译器进行编译和 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