我在Linux Debian(Buster,版本10)发行版中构建32位应用程序时遇到问题。特别是似乎有一个与std :: istream :: seekg(long,std :: _ Ios_Seekdir)有关的问题,它在我的Ubuntu(19.04)系统中正常工作,因此看起来与Debian或编译器和库有关在那台机器上安装。
我已经用尽了所有替代方法:
为gcc和g ++版本7和8安装了multilib:
apt-get install gcc-multilib
apt-get install g++-multilib
apt-get install gcc-7-multilib
apt-get install g++-7-multilib
我同时安装了gcc版本7和8(由于项目的某些部分使用了gcc版本7)。
将LD_LIBRARY_PATH明确设置为/ usr / lib32,/ usr / lib / gcc / x86_64-linux-gnu // 32等
下面是我可以在/ usr /中找到的库:
./ libx32 / libstdc ++。so.6.0.25
./ libx32 / libstdc ++。so.6
./ lib / gcc / x86_64-linux-gnu / 7 / x32 / libstdc ++。so
./ lib / gcc / x86_64-linux-gnu / 7/32 / libstdc ++。so
./ lib / gcc / x86_64-linux-gnu / 7 / libstdc ++。so
./ lib / gcc / x86_64-linux-gnu / 8 / x32 / libstdc ++。so
./ lib / gcc / x86_64-linux-gnu / 8/32 / libstdc ++。so
./ lib / gcc / x86_64-linux-gnu / 8 / libstdc ++。so ./lib/x86_64-linux-gnu/libstdc ++。so.6.0.25
./ lib / x86_64-linux-gnu / libstdc ++。so.6
./ lib32 / libstdc ++。so.6.0.25
./ lib32 / libstdc ++。so.6
./ lib32 / libstdc ++。so
我已将问题分解为一个非常简单的程序:
#include <fstream>
int main()
{
std::ifstream is ("file.txt", std::ifstream::binary);
is.seekg(0, is.end);
}
并且可以在目标体系结构(64位)上很好地进行编译,但是在使用32位编译模式时,它不起作用:
gcc -m32 test32.cpp -lstdc ++
/usr/bin/ld: /tmp/cc0kHsOJ.o: in function main:
test32.cpp:(.text+0x50): undefined reference to std::istream::seekg(long, std::_Ios_Seekdir)
collect2: error: ld returned 1 exit status
请帮助并指导我如何进一步解决此问题。