2017-03-24 9 views
1

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です。それはうまくいくはずで、私はいつもテストの依存関係を維持する必要はなく、後で非常に面倒です。よくあることは何ですか?

+0

os? OSX? g ++コンパイラのバージョン。 –

+0

g ++(Ubuntu 5.4.0-6ubuntu1〜16.04.4)5.4.0 20160609 – Meph

+0

私は 'sfml'がこのライブラリhttps://www.sfml-dev.orgを意味すると仮定しています。そうですか? –

答えて

1

sfml-networkは、sfml-systemに依存します。メイクファイルのリンカコマンドに-lsfml-system-lsfml-networkの前に追加してください。

+0

これは、ある時点でsfml-systemを追加しなくてもすでに動作しています(makeを使用しないフラットなプロジェクト構造上)。だから私はこれが本当だとは思わない。 – Meph

関連する問題