我想我只是犯了一个简单的错误,但我没有得到哪个..无论如何我正在开发一个库,我也在使用 cmake 为项目构建 Makefile:https ://github.com/immapoint/ NaNO3/blob/master/CMakeLists.txt
编译库时一切正常;它构建以下文件:
bin/libNaNO3.dll
lib/libNaNO3.dll.a (I don't like that name as well)
为了测试整个事情,我设置了另一个项目,也使用 cmake。https://github.com/immapoint/NaNO3TestApp/blob/master/CMakeLists.txt
测试库的主文件如下所示: https ://github.com/immapoint/NaNO3TestApp/blob/master/src/main.cpp
但是在编译主文件时,出现以下错误:
CMakeFiles/NaNO3TestApp.dir/objects.a(main.cpp.obj):main.cpp:(.text+0xbf): undefined reference to `nano::Event<int>::attach(std::function<void(int)> *)`
CMakeFiles/NaNO3TestApp.dir/objects.a(main.cpp.obj):main.cpp:(.text+0xd3): undefined reference to `nano::Event<int>::notify(int)`
[...]ld.exe: CMakeFiles/NaNO3TestApp.dir/objects.a(main.cpp.obj): bad reloc address 0x8 in section `.rdata'
无论我是使用 make/cmake 构建项目还是直接使用编译源文件,都会出现此错误
g++ -Wall -pedantic -ansi -std=c++0x main.cpp [-L./lib -I./include] -lNaNO3
所以问题似乎不在于cmake,而在于ld。我正在使用 CMake 2.8 版和包含 GCC 4.7.2 版的 MinGW。
附加信息:
带有 -fPIC 的编译器输出: