簡體   English   中英

g ++失敗,並向標准C ++庫顯示“未定義的引用”錯誤

[英]g++ fails with “undefined reference” errors to the standard C++ library

我已經構建並安裝了g ++,並在一個簡單的“ Hello World”程序上對其進行了測試,它似乎可以正常工作。

但是,對於我們較大的代碼,編譯失敗並顯示以下錯誤:

CMakeFiles/gaim_convert.dir/GaimConvert.cpp.o: In function `Output(std::string const&, std::ostream&)':GaimConvert.cpp:(.text._Z6OutputRKSsRSo[_Z6OutputRKSsRSo]+0x12): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& st d::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)'

正常工作的程序是:

#include <iostream>

int main() {
  std::cout << "Hello World!" << std::endl;
  std::cin.get();
  return 0;
}

因此很明顯,C ++標准庫的某些部分已正確安裝。 這不僅僅是一個沒有安裝libstdc ++的“明顯”安裝錯誤。

該代碼將使用不同版本的編譯器進行編譯,因此不是代碼。

有什么方法可以調試安裝以便刪除此錯誤消息? 庫路徑為LD_LIBRARY_PATH

/tec/mannucci/gccBuild/lib64:/tec/mannucci/gccBuild/lib:/usr/local/gmp510/lib:/usr/local/mpfr311/lib:/usr/local/mpc101/lib:/usr/local/ppl011/lib:/usr/local/cloog0162/lib:/usr/local/lib64:/usr/lib64:...

感謝用戶的評論,我看了一下link命令,顯然有一個問題。 這可能是一個問題。 這是鏈接命令:

/ tec / mannucci / gccBuild / bin / g ++ -fmessage-length = 0 -O3 -DNDEBUG CMakeFiles / gaim_convert.dir / GaimConvert.cpp.o -o gaim_convert -L / usr / lib / gcc / x86_64-redhat-linux / 4.1 .2 -rdynamic ../../lib/geometry/libgeometry.a ../../lib/util/libutil.a ../../ctimetrans/libtimetrans.a ../../libversion.a

注意“ -L”鏈接到舊版本的gcc。 然后的問題是如何告訴cmake庫在哪里。 我不知道該怎么做。 那就是使用LD_LIBRARY_PATH的重點。 我認為這將解決該問題。

與此相關的是,令我有些困惑的是,cmake找不到$ path中的g ++編譯器,而是恢復為/ usr / bin / c ++。 然后,我不得不編輯CMakeCache.txt文件,以使其使用實際上在路徑上的g ++而不是/ usr / bin / c ++。

我們能夠解決此問題的方法如下:

1)定義環境變量CC(= gcc)和CCX(= g ++)指向我們正在使用的gcc編譯器。 cmake使用這些環境變量來查找c和c ++編譯器。

2)將LD_LIBRARY_PATH設置為gcc和g ++編譯器的相應庫支持的路徑。

3)確保正確的編譯器在路徑上。

在執行此操作之前,cmake將無法正確配置,並且編譯將失敗。

這些步驟似乎適用於在非標准位置構建的編譯器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM