SFMLで定義されたSymbolにリンカエラーがありますが、ライブラリにリンクしているにもかかわらず、それらがどうなっているのかわかりません。 私は現在学習しているmakeを使用しており、最小限の開発環境を構築したいと考えています。g ++ undefinedライブラリシンボルへの参照
以下の情報より情報が必要な場合は、息子をください。私はちょうど質問のサイズを最小限に抑えたいと思う。
[email protected] ~/Documents/dev/cpp/proj/beep $ make clean
rm -f build/*.o build/release/*.o build/debug/*.o build/test/*.o
[email protected] ~/Documents/dev/cpp/proj/beep $ make tests
//test obj first
g++ -std=c++14 -Wall -pthread -Iinclude -c test/Packager.ut.cpp -o build/test/Packager.ut.o -g3
//now the src obj
g++ -std=c++14 -Wall -pthread -Iinclude -c src/ClientAddress.cpp -o build/debug/ClientAddress.o -g3
g++ -std=c++14 -Wall -pthread -Iinclude -c src/Packager.cpp -o build/debug/Packager.o -g3
g++ -std=c++14 -Wall -pthread -Iinclude -c src/Package.cpp -o build/debug/Package.o -g3
Built debug object files.
//now the first test itself
g++ -std=c++14 -Wall -pthread -Iinclude -lsfml-network build/test/Packager.ut.o build/debug/ClientAddress.o build/debug/Packager.o build/debug/Package.o -g3 -o bin/test/Packager.ut
build/test/Packager.ut.o: In function `main':
/home/XXX/Documents/dev/cpp/proj/beep/test/Packager.ut.cpp:69: undefined reference to `sf::IpAddress::IpAddress(char const*)'
build/debug/ClientAddress.o: In function `nw::udp::ClientAddress::ClientAddress()':
/home/XXX/Documents/dev/cpp/proj/beep/src/ClientAddress.cpp:21: undefined reference to `sf::IpAddress::IpAddress(char const*)'
build/debug/ClientAddress.o: In function `nw::udp::operator==(nw::udp::ClientAddress const&, nw::udp::ClientAddress const&)':
/home/XXX/Documents/dev/cpp/proj/beep/src/ClientAddress.cpp:33: undefined reference to `sf::operator==(sf::IpAddress const&, sf::IpAddress const&)'
...
のように... SFのすべてのmentioningsは::ファイルが
を引用しているの内側に、私は(例えばClientAddressにのために)他のテストをコンパイルしようとする場合、私は同じエラーパターンを得る
もちろん、どうやってそこにリンクしているのか知りたい。ご覧のとおり、libは-lsfml-networkとリンクしています。私もSMFLのインストールをチェックしたので、少なくとも標準ディレクトリからlibファイルが抜けている可能性は低いです。
私のg ++の使用には誤りがあり、注文やsmthをコンパイルしてリンクしていると思います。質問の第二部として
>bin
----mainexec
--->test
----.ut
>build
--->debug
----.o
--->release
----.o
--->test
----.ut.o
>src
---- .cpp
>include
---- .h
>test
---- .ut.cpp
、私はテストを構築するためのより良い方法があれば、私は単に私のテストですべてのSRC-OBJをリンクするので、お尋ねしたいと思います:私のプロジェクトツリーが
たとえ実際に必要とされるより多くのsrc-objがリンクされていても-objです。それはうまくいくはずで、私はいつもテストの依存関係を維持する必要はなく、後で非常に面倒です。よくあることは何ですか?
os? OSX? g ++コンパイラのバージョン。 –
g ++(Ubuntu 5.4.0-6ubuntu1〜16.04.4)5.4.0 20160609 – Meph
私は 'sfml'がこのライブラリhttps://www.sfml-dev.orgを意味すると仮定しています。そうですか? –