我从这里下载了gtest 1.7.0来源:
https://code.google.com/p/googletest/downloads/list
并在ubuntu 13.10上构建gtest .a文件(lib文件):
Linux ubuntu 3.11.0-15-generic #23-Ubuntu SMP Mon Dec 9 18:17:04 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
并调用生成的lib:libgtest.a
。在我的main.cpp文件中有:
#include <iostream>
#include "gtest/gtest.h"
int main(){
std::cout << "Test \n";
int argc = 2;
char* cp01;
char* cp02;
char* argv[] = {cp01, cp02};
testing::InitGoogleTest(&argc, argv);
return 0;
}
从我建立的终端:
g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -lpthread -lgtest
会出现以下错误:
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_key_create'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_getspecific'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_key_delete'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_setspecific'
collect2: error: ld returned 1 exit status
基于此: error during making GTest
我还尝试了-pthread
而不是-lpthread
,但也提出了同样的错误:
g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -pthread -lgtest
编辑:我还尝试将-pthread
指定为最后一个参数:
g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -lgtest -pthread
同样的错误 我做错了什么?
答案 0 :(得分:13)
您需要在-pthread
之后指定-lgtest
。链接器按顺序获取库,并且只需要解析那时未定义的引用所需的数量。
答案 1 :(得分:12)
不,问题在于Gtest的构建。
如果您使用标准配置方法构建它,则无法正确提供-lpthread
来创建libgtest.so
。因此,当您尝试构建实际使用pthread功能的最终共享库时,它会失败。
相反,请使用Cmake方法:
cd gtest-1.7.0
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..
make
然后将这些手动安装到/usr/lib/
此版本正确地将libpthread链接到libgtest。
答案 2 :(得分:4)
选项-lgtest
正在尝试关联动态库libgtest.so
。您
希望链接静态库/home/user/gtest-1.7.0/lib/.libs/libgtest.a
。
而不是:
g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -lgtest -pthread
使用:
g++ main.cpp -I/home/user/gtest-1.7.0/include /home/user/gtest-1.7.0/lib/.libs/libgtest.a -pthread
请注意,您的命令行不会为生成的可执行文件提供任何名称,默认情况下也是如此
到a.out
。如果你想要它,例如mytest
,然后执行:
g++ -o mytest main.cpp -I/home/user/gtest-1.7.0/include /home/user/gtest-1.7.0/lib/.libs/libgtest.a -pthread
答案 3 :(得分:4)
在您的可执行文件中使用gtest时,使用-pthread
代替-lpthread
(用于链接pthread-library)。
或强>
在-lpthread
之后移动libgtest.a
(序列很重要)。
答案 4 :(得分:0)
要回答我们可能需要更多信息,您是否在64位计算机上并下载了32位库?