ketoo / NoahGameFrame

A fast, scalable, distributed game server engine/framework for C++, include the actor library, network library, can be used as a real time multiplayer game engine ( MMO RPG/MOBA ), which support C#/Lua script/ Unity3d, Cocos2dx and plan to support Unreal.
https://github.com/ketoo/NoahGameFrame/wiki
Apache License 2.0
3.97k stars 1.09k forks source link

Issue with linking on Ubuntu #218

Closed MorriTheDragon closed 4 years ago

MorriTheDragon commented 4 years ago

Bulild environment: x64 Ubuntu 18.04.1 gcc version 7.5.0 cmake version 3.10.2 automake (GNU automake) 1.15.1

The output

[ 99%] Linking CXX executable ../../../../../_Out/Debug/NFServer
../../../../../_Out/Debug/NFPluginLoader.a(NFPluginManager.cpp.o): In function `NFPluginManager::ReLoadPlugin(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/home/morri/workspace/ROP-Server/NFComm/NFPluginLoader/NFPluginManager.cpp:527: undefined reference to `dlerror'
../../../../../_Out/Debug/NFPluginLoader.a(NFPluginManager.cpp.o): In function `NFPluginManager::LoadPluginLibrary(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/home/morri/workspace/ROP-Server/NFComm/NFPluginLoader/NFPluginManager.cpp:952: undefined reference to `dlerror'
../../../../../_Out/Debug/NFPluginLoader.a(NFDynLib.cpp.o): In function `NFDynLib::Load()':
/home/morri/workspace/ROP-Server/NFComm/NFPluginLoader/NFDynLib.cpp:31: undefined reference to `dlopen'
../../../../../_Out/Debug/NFPluginLoader.a(NFDynLib.cpp.o): In function `NFDynLib::UnLoad()':
/home/morri/workspace/ROP-Server/NFComm/NFPluginLoader/NFDynLib.cpp:38: undefined reference to `dlclose'
../../../../../_Out/Debug/NFPluginLoader.a(NFDynLib.cpp.o): In function `NFDynLib::GetSymbol(char const*)':
/home/morri/workspace/ROP-Server/NFComm/NFPluginLoader/NFDynLib.cpp:44: undefined reference to `dlsym'
../../../../../_Out/Debug/NFKernelPlugin.a(NFThreadPoolModule.cpp.o): In function `std::thread::thread<void (NFThreadCell::*)(), NFThreadCell*>(void (NFThreadCell::*&&)(), NFThreadCell*&&)':
/usr/include/c++/7/thread:122: undefined reference to `pthread_create'
/home/morri/workspace/ROP-Server/Dependencies/lib/Debug/liblua.a(loadlib.c.o): In function `lsys_unloadlib':
/home/morri/workspace/ROP-Server/Dependencies/vcpkg/buildtrees/lua/src/lua-5-292bcd51ee/src/loadlib.c:122: undefined reference to `dlclose'
/home/morri/workspace/ROP-Server/Dependencies/lib/Debug/liblua.a(loadlib.c.o): In function `lsys_load':
/home/morri/workspace/ROP-Server/Dependencies/vcpkg/buildtrees/lua/src/lua-5-292bcd51ee/src/loadlib.c:127: undefined reference to `dlopen'
/home/morri/workspace/ROP-Server/Dependencies/vcpkg/buildtrees/lua/src/lua-5-292bcd51ee/src/loadlib.c:128: undefined reference to `dlerror'
/home/morri/workspace/ROP-Server/Dependencies/lib/Debug/liblua.a(loadlib.c.o): In function `lsys_sym':
/home/morri/workspace/ROP-Server/Dependencies/vcpkg/buildtrees/lua/src/lua-5-292bcd51ee/src/loadlib.c:134: undefined reference to `dlsym'
/home/morri/workspace/ROP-Server/Dependencies/vcpkg/buildtrees/lua/src/lua-5-292bcd51ee/src/loadlib.c:135: undefined reference to `dlerror'
/usr/lib/gcc/x86_64-linux-gnu/7/libstdc++.a(thread.o): In function `std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)())':
(.text._ZNSt6thread15_M_start_threadESt10unique_ptrINS_6_StateESt14default_deleteIS1_EEPFvvE+0x11): undefined reference to `pthread_create'
/usr/lib/gcc/x86_64-linux-gnu/7/libstdc++.a(thread.o): In function `std::thread::_M_start_thread(std::shared_ptr<std::thread::_Impl_base>, void (*)())':
(.text._ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEEPFvvE+0x5f): undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
NFComm/NFServer/CMakeFiles/NFServer.dir/build.make:126: recipe for target '../../../_Out/Debug/NFServer' failed
make[2]: *** [../../../_Out/Debug/NFServer] Error 1
CMakeFiles/Makefile2:246: recipe for target 'NFComm/NFServer/CMakeFiles/NFServer.dir/all' failed
make[1]: *** [NFComm/NFServer/CMakeFiles/NFServer.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

As far as I see, somewhere -ldl and -pthread is missing, but since it's cmake, the build should be automatically generated, therefore my question what could be wrong?

MorriTheDragon commented 4 years ago

I managed to successfuly build it. I had to do two edits however. First one in NFComm/NFPluginLoader/CMakeLists.txt:line:71

target_link_libraries(NFPluginLoader -static-libstdc++ -ldl)

Second one in NFComm/NFServer/CMakeLists.txt:line:23

target_link_libraries(NFServer -static-libstdc++ -lpthread)
ketoo commented 4 years ago

Thanks, it looks like some applications update and NF needs to update too.

ketoo commented 4 years ago

fixed.