C/C++静态链接pthread库的坑【-static -pthread】

简介: C/C++静态链接pthread库的坑【-static -pthread】

参考:

https://blog.csdn.net/Kajima_/article/details/111415651

在静态编译tig时,遇到如下问题:

LDFLAGS=--static ./configure --prefix=`pwd`/install
make V=1

log如下:

...
gcc -g -O2  -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DHAVE_CONFIG_H '-DTIG_VERSION="2.5.5"' '-DSYSCONFDIR="/home/pengdl/work/Third_Part/tig/install/etc"'  --static src/tig.o src/types.o src/string.o src/util.o src/map.o src/argv.o src/io.o src/refdb.o src/builtin-config.o src/request.o src/line.o src/keys.o src/repo.o src/options.o src/draw.o src/prompt.o src/display.o src/view.o src/search.o src/parse.o src/watch.o src/pager.o src/log.o src/reflog.o src/diff.o src/help.o src/tree.o src/blob.o src/blame.o src/refs.o src/status.o src/stage.o src/main.o src/stash.o src/grep.o src/ui.o src/apps.o src/graph.o src/graph-v1.o src/graph-v2.o compat/hashtab.o compat/utf8proc.o -lpcreposix -lpcre -Wl,-Bsymbolic-functions -lncursesw -ltinfo -o src/tig
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libpcre.a(libpcre_la-pcre_jit_compile.o): in function `sljit_generate_code':
(.text+0x986): undefined reference to `pthread_mutex_lock'
/usr/bin/ld: (.text+0xa0a): undefined reference to `pthread_mutex_unlock'
/usr/bin/ld: (.text+0xe6c): undefined reference to `pthread_mutex_unlock'
/usr/bin/ld: (.text+0xe8f): undefined reference to `pthread_mutex_unlock'

从最后的链接看,没有pthread,然后修改配置:

LIBS=-lpthread LDFLAGS=--static ./configure --prefix=`pwd`/install
make V=1

log如下:

gcc -g -O2  -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DHAVE_CONFIG_H '-DTIG_VERSION="2.5.5"' '-DSYSCONFDIR="/home/pengdl/work/Third_Part/tig/install/etc"'  --static src/tig.o src/types.o src/string.o src/util.o src/map.o src/argv.o src/io.o src/refdb.o src/builtin-config.o src/request.o src/line.o src/keys.o src/repo.o src/options.o src/draw.o src/prompt.o src/display.o src/view.o src/search.o src/parse.o src/watch.o src/pager.o src/log.o src/reflog.o src/diff.o src/help.o src/tree.o src/blob.o src/blame.o src/refs.o src/status.o src/stage.o src/main.o src/stash.o src/grep.o src/ui.o src/apps.o src/graph.o src/graph-v1.o src/graph-v2.o compat/hashtab.o compat/utf8proc.o -lpthread -lpcreposix -lpcre -Wl,-Bsymbolic-functions -lncursesw -ltinfo -o src/tig
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libpcre.a(libpcre_la-pcre_jit_compile.o): in function `sljit_generate_code':
(.text+0x986): undefined reference to `pthread_mutex_lock'
/usr/bin/ld: (.text+0xa0a): undefined reference to `pthread_mutex_unlock'
/usr/bin/ld: (.text+0xe6c): undefined reference to `pthread_mutex_unlock'
/usr/bin/ld: (.text+0xe8f): undefined reference to `pthread_mutex_unlock'
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/l

错误一样。

通过询问度娘,然后修改配置:

LIBS=-pthread LDFLAGS=--static ./configure --prefix=`pwd`/install
make V=1

log如下:

config.status: config.h is unchanged
gcc -g -O2  -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DHAVE_CONFIG_H '-DTIG_VERSION="2.5.5"' '-DSYSCONFDIR="/home/pengdl/work/Third_Part/tig/install/etc"'  --static src/tig.o src/types.o src/string.o src/util.o src/map.o src/argv.o src/io.o src/refdb.o src/builtin-config.o src/request.o src/line.o src/keys.o src/repo.o src/options.o src/draw.o src/prompt.o src/display.o src/view.o src/search.o src/parse.o src/watch.o src/pager.o src/log.o src/reflog.o src/diff.o src/help.o src/tree.o src/blob.o src/blame.o src/refs.o src/status.o src/stage.o src/main.o src/stash.o src/grep.o src/ui.o src/apps.o src/graph.o src/graph-v1.o src/graph-v2.o compat/hashtab.o compat/utf8proc.o -pthread -lpcreposix -lpcre -Wl,-Bsymbolic-functions -lncursesw -ltinfo -o src/tig
SHELL 复制 全屏

完美编过。

相关文章
|
Linux vr&ar C语言
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
1952 2
|
编译器 开发工具 C++
Dev-C++详细安装教程及中文设置(附带安装包链接)
Dev-C++详细安装教程及中文设置(附带安装包链接)
9430 0
|
关系型数据库 数据库 C++
【C++】Windows使用Visual Studio C++链接云数据库PostgreSQL(沉浸式老爷教学)
【C++】Windows使用Visual Studio C++链接云数据库PostgreSQL(沉浸式老爷教学)
|
编译器 程序员 API
【踩坑记录】解决GCC 中C++ 17 的 std::filesystem 链接报错:undefined reference to `std::filesystem::path
【踩坑记录】解决GCC 中C++ 17 的 std::filesystem 链接报错:undefined reference to `std::filesystem::path
3810 4
|
缓存 编译器 API
【C/ C++链接】深入C/C++链接:从基础到高级应用(二)
【C/ C++链接】深入C/C++链接:从基础到高级应用
284 1
|
编译器 C++ 开发者
【C/ C++链接】深入C/C++链接:从基础到高级应用(一)
【C/ C++链接】深入C/C++链接:从基础到高级应用
576 0
|
存储 算法 安全
【C/C++ 模板编程 链接问题】 了解和解决模板编程中的链接错误以及正确的模板编写方式
【C/C++ 模板编程 链接问题】 了解和解决模板编程中的链接错误以及正确的模板编写方式
611 1
|
算法 Unix Linux
【C/C++ 疑难解决】深入解析C++链接错误:实用的调试技巧和方法
【C/C++ 疑难解决】深入解析C++链接错误:实用的调试技巧和方法
2139 1
|
缓存 编译器 程序员
C/C++编译器链接优化技术:链接优化是在编译器和链接器之间进行的优化
C/C++编译器链接优化技术:链接优化是在编译器和链接器之间进行的优化
861 0
|
自然语言处理 编译器 程序员
标题:从预编译到链接:探索C/C++程序的翻译环境全貌
标题:从预编译到链接:探索C/C++程序的翻译环境全貌
230 1