undefined reference to `pthread_key_create' (linker error)

前端 未结 5 685
庸人自扰
庸人自扰 2020-11-29 11:51

I have downloaded gtest 1.7.0 sources from here:

https://code.google.com/p/googletest/downloads/list

and build the gtest .a files (lib files) on ubuntu 13.10

相关标签:
5条回答
  • 2020-11-29 12:37

    Use -pthread instead of -lpthread (for linking with pthread-library), while you using gtest in your executable.

    OR

    Move the -lpthread after libgtest.a (sequence matters).

    0 讨论(0)
  • 2020-11-29 12:42

    To answer we probably need more information, are you on a 64 bit machine and downloaded a 32 bit library?

    0 讨论(0)
  • 2020-11-29 12:44

    You need to specify -pthread after -lgtest. The linker takes libraries in order, and only takes as much as it needs to resolve references which are undefined at that point.

    0 讨论(0)
  • 2020-11-29 12:47

    The option -lgtest is attempting to link the dynamic library libgtest.so. You wish to link the static library /home/user/gtest-1.7.0/lib/.libs/libgtest.a.

    Instead of:

    g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -lgtest -pthread
    

    use:

    g++ main.cpp -I/home/user/gtest-1.7.0/include /home/user/gtest-1.7.0/lib/.libs/libgtest.a -pthread
    

    Note that your commandline supplies no name for the resulting executable, which will default to a.out. If you want it called, e.g. mytest, then do:

    g++ -o mytest main.cpp -I/home/user/gtest-1.7.0/include /home/user/gtest-1.7.0/lib/.libs/libgtest.a -pthread
    
    0 讨论(0)
  • 2020-11-29 12:58

    Nope, the problem is with Gtest's build.

    If you build it using the standard configure approach, it isn't supplying the -lpthread correctly to create libgtest.so. Hence, when you try building a final shared library that actually uses the pthread capability it fails.

    Instead, use the Cmake approach:

    cd gtest-1.7.0
    mkdir build
    cd build
    cmake -DBUILD_SHARED_LIBS=ON ..
    make 
    

    And then manually install these into /usr/lib/

    This version correctly links in libpthread into libgtest.

    0 讨论(0)
提交回复
热议问题