1

OSXLionで非常に単純なc++プログラムをリンクするのに問題があります。エラーメッセージは

Undefined symbols for architecture x86_64: "std::basic_string<char, std::char_traits<char>

コンパイラからの完全な詳細出力は次のとおりです。

Nicholass-MacBook-Pro:hello_vbo-build jubei$ make VERBOSE=1
"/Applications/CMake 2.8-9.app/Contents/bin/cmake" -H/Users/jubei/coding/hello_vbo -               B/Users/jubei/coding/hello_vbo-build --check-build-system CMakeFiles/Makefile.cmake 0
"/Applications/CMake 2.8-9.app/Contents/bin/cmake" -E cmake_progress_start /Users/jubei/coding/hello_vbo-build/CMakeFiles /Users/jubei/coding/hello_vbo-build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make -f CMakeFiles/hellovbo.dir/build.make CMakeFiles/hellovbo.dir/depend
cd /Users/jubei/coding/hello_vbo-build && "/Applications/CMake 2.8-9.app/Contents/bin/cmake" -E cmake_depends "Unix Makefiles" /Users/jubei/coding/hello_vbo /Users/jubei/coding/hello_vbo /Users/jubei/coding/hello_vbo-build /Users/jubei/coding/hello_vbo-build /Users/jubei/coding/hello_vbo-build/CMakeFiles/hellovbo.dir/DependInfo.cmake --color=
make -f CMakeFiles/hellovbo.dir/build.make CMakeFiles/hellovbo.dir/build
"/Applications/CMake 2.8-9.app/Contents/bin/cmake" -E cmake_progress_report/Users/jubei/coding/hello_vbo-build/CMakeFiles 1
[100%] Building CXX object CMakeFiles/hellovbo.dir/main.cpp.o
/opt/local/bin/g++-mp-4.8    --std=c++11 -I/usr/local/include -I/Users/jubei/coding/hello_vbo/include    -o CMakeFiles/hellovbo.dir/main.cpp.o -c /Users/jubei/coding/hello_vbo/main.cpp
Linking CXX executable hellovbo
"/Applications/CMake 2.8-9.app/Contents/bin/cmake" -E cmake_link_script CMakeFiles/hellovbo.dir/link.txt --verbose=1
/opt/local/bin/g++-mp-4.8   --std=c++11 -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/hellovbo.dir/main.cpp.o  -o hellovbo  -L/usr/local/lib -lglfw -lglew -framework Cocoa -framework OpenGL -framework IOKit -lstdc++ 
Undefined symbols for architecture x86_64:
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)", referenced from:
  readTextFile(char const*) in main.cpp.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make[2]: *** [hellovbo] Error 1
make[1]: *** [CMakeFiles/hellovbo.dir/all] Error 2
make: *** [all] Error 2

この種のエラーは、g++の代わりにgccを使用している人が原因であるというさまざまな投稿を見てきましたが、私の場合はg++を使用しています。MacportsでビルドされたGCC4.8を使用してコンパイルしています。

この単純なプログラムは、同じシステムで正常にコンパイルされることに注意してください。クリーンインストール後、突然コンパイルが拒否されます。

4

2 に答える 2

1

欠落している記号は、のムーブ代入演算子ですstd::stringlibstd++ここで、とでコンパイルされたオブジェクトファイル/ライブラリを混合していることが起こっていると推測しますlibc++

于 2012-09-12T06:26:01.413 に答える
0

おそらく/usr/ lib / libstdc ++とリンクしますが、4.8の場合は(...)/ gcc4.8 / lib / libstdc ++とリンクする必要があり、異なるライブラリになります。

于 2013-12-09T23:13:24.777 に答える