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

完美編過。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM