未定义对`std :: istream :: seekg(long,std :: _ Ios_Seekdir)的引用'

时间:2019-06-25 12:51:16

标签: c++ linux gcc g++ debian

我在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

请帮助并指导我如何进一步解决此问题。

0 个答案:

没有答案