我从这里下载了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
Run Code Online (Sandbox Code Playgroud)
并且生成的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;
}
Run Code Online (Sandbox Code Playgroud)
从我建立的终端:
g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -lpthread -lgtest
Run Code Online (Sandbox Code Playgroud)
这给出了以下错误:
/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
Run Code Online (Sandbox Code Playgroud)
基于此: 制作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
Run Code Online (Sandbox Code Playgroud)
编辑:我也试图指定-pthread为最后一个参数:
g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -lgtest -pthread
Run Code Online (Sandbox Code Playgroud)
同样的错误我做错了什么?
小智 12
不,问题在于Gtest的构建.
如果使用标准配置方法构建它,则无法-lpthread正确提供创建libgtest.so.因此,当您尝试构建实际使用pthread功能的最终共享库时,它将失败.
相反,使用Cmake方法:
cd gtest-1.7.0
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..
make
Run Code Online (Sandbox Code Playgroud)
然后手动将这些安装到 /usr/lib/
此版本正确地将libpthread链接到libgtest.
该选项-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
Run Code Online (Sandbox Code Playgroud)
使用:
g++ main.cpp -I/home/user/gtest-1.7.0/include /home/user/gtest-1.7.0/lib/.libs/libgtest.a -pthread
Run Code Online (Sandbox Code Playgroud)
请注意,您的命令行没有为生成的可执行文件提供名称,默认名称为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
Run Code Online (Sandbox Code Playgroud)
当您在可执行文件中使用 gtest 时,请使用-pthread代替(用于与 pthread-library 链接)。-lpthread
或者
移动-lpthread后面libgtest.a(顺序很重要)。
| 归档时间: |
|
| 查看次数: |
20963 次 |
| 最近记录: |