Linker errors with codelite, unittest++ and g++ on linux

北城余情 提交于 2020-02-04 05:20:29

问题


I'm new to unit testing in c++, and writing c++ on Linux (Mint). I'm using CodeLite as my IDE. I have found several answers on stackoverflow about linker errors, but after hours of trying various solutions I have not succeeded in implementing a solution correctly.

I installed unittest++ through apt-get. The unittest++ header files were installed in /usr/include, so I added this to the Compiler linker options in Codelite (Right click project name->Settings, Compiler): Codelite screenshot

I then have a very simple program, which consists entirely of one main.cpp file:

#include <unittest++/UnitTest++.h>
//See if unit tests are working
TEST(MyMath) {
    CHECK(false);
}

int main()
{
    UnitTest::RunAllTests();
    return 0;
}

Running the project at this point generates a stream of linker errors other users have experienced, for example:

main.cpp:4: undefined reference to UnitTest::CurrentTest::Details()

At this point, my understanding is that I now need to tell the g++ compiler about the object files and link them to the unittest++ files. And this is where I'm stuck. The only .o file I see is in Debug/main.cpp.o and running the command
g++ main.cpp -o main.cpp.o -Lunittest++ as well as variations with the I and o flags, but all of them return the same linker errors I get when I try to compile. I've also tried to copy every g++ line in the forums and only get various errors.

I've tried to find a solution in the g++ man pages, read about the flags I've been using and did not infer a solution. I then quickly got buried in quantity of pages in the man entry. The documentation for CodeLite and unittest++ seems woefully out of date, so I posted here on stackoverflow as a last resort.

I'm fairly certain I'm just making a rookie mistake. If someone has feedback, I'd be grateful.


回答1:


In your explanation, you try to link manually with g++ -c main.cpp -o main.cpp.o -Lunittest++ , but the -L option gives the path to additional directories to search for libraries. You probably want -lunittest++ to link with the unittest++ library. That library should provide the symbols you see in the "undefined reference" errors.

As a side note, "/usr/include" should be in the default search path and there's no need to add it explicitly.



来源:https://stackoverflow.com/questions/42657198/linker-errors-with-codelite-unittest-and-g-on-linux

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