在m64自动工具项目中编译m32库 我正在创建M64自动工具C++项目。主程序编译得很好。然而,我的一小部分代码需要编译一个32位库(我的主程序不会使用)。设置如下 lib_LTLIBRARIES = $(top_builddir)/lib/libabc.la __top_builddir__lib_libabc_la_LDFLAGS = -version-info 1:0:0 -m32 __top_builddir__lib_libabc_la_SOURCES = \ abc.cc AM_CXXFLAGS = -m32 endif

在m64自动工具项目中编译m32库 我正在创建M64自动工具C++项目。主程序编译得很好。然而,我的一小部分代码需要编译一个32位库(我的主程序不会使用)。设置如下 lib_LTLIBRARIES = $(top_builddir)/lib/libabc.la __top_builddir__lib_libabc_la_LDFLAGS = -version-info 1:0:0 -m32 __top_builddir__lib_libabc_la_SOURCES = \ abc.cc AM_CXXFLAGS = -m32 endif,c++,cross-compiling,autotools,C++,Cross Compiling,Autotools,当我编译这个项目时,它给出了两种类型的错误。首先,即使安装了gcc multilib和g++-multilib,链接器也不会搜索32位库。我可以通过添加-L选项来解决这个问题,让链接器搜索32位库。但这种解决方案损害了可移植性。其次,自动工具添加了更多的64位输入对象,如crti.o,这会导致编译错误。完整的错误输出在这里 libtool: link: g++ -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/x86_64-linux- gnu/4.

当我编译这个项目时,它给出了两种类型的错误。首先,即使安装了gcc multilib和g++-multilib,链接器也不会搜索32位库。我可以通过添加-L选项来解决这个问题,让链接器搜索32位库。但这种解决方案损害了可移植性。其次,自动工具添加了更多的64位输入对象,如crti.o,这会导致编译错误。完整的错误输出在这里

libtool: link: g++  -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/x86_64-linux-
    gnu/4.8/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-
    gnu/4.8/crtbeginS.o  .libs/abc.o   -L/usr/lib/gcc/x86_64-linux-gnu/4.8 -
    L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu -
    L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib -L/lib/x86_64-linux-gnu -
    L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -
    L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../.. -lstdc++ -lm -lc -lgcc_s 
    /usr/lib/gcc/x86_64-linux-gnu/4.8/crtendS.o /usr/lib/gcc/x86_64-linux-
    gnu/4.8/../../../x86_64-linux-gnu/crtn.o  -m32 -msse2 -O0 -m32   -Wl,-soname -
    Wl,libabc.so.1 -o ../../lib/.libs/libabc.so.1.0.0
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libstdc++.a when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libm.so when searching for -lm
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libm.a when searching for -lm
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libm.so when searching for -lm
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libm.a when searching for -lm
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libc.a when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.a when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.8/crtbeginS.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.8/crtendS.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crtn.o' is incompatible with i386 output
collect2: error: ld returned 1 exit status

你知道如何用合适的32位系统库编译这个32位库吗?

首先:我想你需要设置CFLAGS而不是CXXFLAGS

CFLAGS=-m32
这可能没什么,但是你试过在其他人之前设置-m32标志吗

第二:你试过使用pkg配置吗?您需要安装它并配置PKG\u CONFIG\u路径

`pkg-config --libs lib32stdc++`


抱歉,我正在学习英语

链接器正在查找libc++但只找到libstdc++。请从链接器标志中删除-lstd++或从LLVM项目中安装libc++@usr1234567,谢谢您的回复。这应该不是libstdc++的问题,当我添加-L/usr/lib32标志时,链接器可以找到正确的库。我不理解你的回答。你自己解决了吗?那么,如果你能包装一个答案并接受你的答案,那就太好了。如果我帮了你,告诉我,我创造了答案,你接受了。如果你的问题持续下去,我不明白你的问题是什么。抱歉。@usr1234567问题的第一部分可以通过在链接器标志中添加-L/usr/lib32选项来解决。我的问题是为什么Autotools自己找不到正确的库。但是,即使我添加了-L选项,由于添加了crti.o输入,它仍然无法编译。我想知道如何让自动工具设置正确的输入文件。