This question already has answers here:
Why does the order in which libraries are linked sometimes cause errors in GCC?
(9个答案)
3年前关闭。
SFML定义的符号有链接器错误,但是尽管链接了lib,但我看不到它们如何发生。
我使用的是make,目前我正在学习,我想用它构建一个简约的开发环境。
如果您需要以下以外的其他信息,请打个招呼。我只想最小化问题的大小。
依此类推...在文件中引用sf::的所有内容
如果尝试编译其他测试,则会得到相同的错误模式(例如,对于ClientAddress)
当然,我现在想知道我在哪里错误地链接了什么。如您所见,该库与-lsfml-network链接。我还检查了SMFL的安装,因此,至少在标准目录中缺少lib文件的可能性较小。
我猜我在使用g++,编译和链接命令或smth时出现错误。
我的项目树:
作为问题的第二部分,我想问一下是否有更好的构建测试的方法,因为我只是简单地将每个src-obj链接到我的test-obj,即使链接的src-obj比它更多实际需要。它应该可以工作,并且我不必一直保持测试依赖性,这以后会很麻烦。有什么共同点?
(9个答案)
3年前关闭。
SFML定义的符号有链接器错误,但是尽管链接了lib,但我看不到它们如何发生。
我使用的是make,目前我正在学习,我想用它构建一个简约的开发环境。
如果您需要以下以外的其他信息,请打个招呼。我只想最小化问题的大小。
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&)'
...
依此类推...在文件中引用sf::的所有内容
如果尝试编译其他测试,则会得到相同的错误模式(例如,对于ClientAddress)
当然,我现在想知道我在哪里错误地链接了什么。如您所见,该库与-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链接到我的test-obj,即使链接的src-obj比它更多实际需要。它应该可以工作,并且我不必一直保持测试依赖性,这以后会很麻烦。有什么共同点?
最佳答案
sfml-network
依赖于sfml-system
。尝试在makefile的链接器命令中的-lsfml-system
之前添加-lsfml-network