g++ undefined reference to library symbols [duplicate]

半城伤御伤魂 提交于 2019-12-11 06:08:28

问题


There are linker errors to Symbols defined by SFML, but i cannot see how they occur despite that I linked the lib. I'm using make, which I currently learn and I want to build a minimalistic dev-environment with it.

Give a holler if you need anymore information than the following. I'd just like to minimize the questions size.

XXX@XXX ~/Documents/dev/cpp/proj/beep $ make clean                                                                                                         
rm -f build/*.o build/release/*.o build/debug/*.o build/test/*.o
XXX@XXX ~/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&)'
...

and so on ... every mentionings of sf:: inside the files are quoted

I get the same error pattern if I try to compile the other tests (for ClientAddress for example)

Of course i now want to know what i linked wrong how there. As you can see the lib is linked with -lsfml-network. I also checked the SMFL installation, so it is at least less likely a lib file gone missing from standard directory.

I guess there is an error in my usage of g++ , compiling and linking orders or smth.

My project tree:

>bin
----mainexec
--->test
    ----.ut
>build
--->debug
    ----.o
--->release
    ----.o
--->test
    ----.ut.o
>src
---- .cpp
>include
---- .h
>test
---- .ut.cpp

As a second part of the question, I'd like to ask if there is a better way to build tests, because I simply link every src-obj with my test-obj, even if there are way more src-obj linked than it actually needs. It should work and I do not have to maintain my test dependencies all the time, which later would be very cumbersome. What is common ?


回答1:


sfml-network has a dependency on sfml-system. Try add -lsfml-system before -lsfml-network in your linker command in your makefile



来源:https://stackoverflow.com/questions/42990682/g-undefined-reference-to-library-symbols

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!