linux:gcc編譯error:“collect2: ld returned 1 exit status” (Undefined reference )
在linux環境下編譯一個工程,不管怎樣編譯,總是出現以下錯誤:
-bash-4.1$ gcc test.c consumers_producers.c
/tmp/ccQzS4PV.o: In function `main':
test.c:(.text+0x92): undefined reference to `pthread_create'
test.c:(.text+0xf2): undefined reference to `pthread_create'
test.c:(.text+0x123): undefined reference to `pthread_join'
collect2: ld returned 1 exit status
Undefined reference to 錯誤:
這類錯誤是在
連結過程
中出現的,可能有兩種原因∶
一是使用者自己定義的函式或者全域性變數所在原始碼檔案,沒有被編譯、連結,或者乾脆還沒有定義,這 需要使用者根據實際情況修改源程式,給出全域性變數或者函式的定義體;
二是未定義的符號是一個標準的庫函式,在源程式中使用了該庫函式,而連結過程中還沒有 給定相應的函式庫的名稱,或者是該檔案庫的目錄名稱有問題
出現此種錯誤,表示你的程式碼應該是沒有問題的
經過作者我多番查詢,才找出了原因,如下:
SYNOPSIS
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
Compile and link with -pthread.
最重要的是這句話:
Compile and link with -pthread.
故在使用gcc編譯的時候應該是:gcc xxx -pthread
一定要加上“-lpthread”,這樣才可以編譯通過
在上面的例子中:
應該是: gcc test.c consumers_producers.c -pthread
相關推薦
linux:gcc編譯error:“collect2: ld returned 1 exit status” (Undefined reference )
在linux環境下編譯一個工程,不管怎樣編譯,總是出現以下錯誤: -bash-4.1$ gcc test.c consumers_producers.c /tmp/ccQzS4PV.o: In function `main': test.c:(.text+
編譯器錯誤:/tmp/ccyOgqYQ.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0' collect2: ld returned 1 exit status
今天下午在編寫一個c程式檔案檔名:test.cpp, 檔案內容見附錄。使用gcc編譯的時候出現/tmp/ccyOgqYQ.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0' collect2: l
關於qt error collect2 ld returned 1 exit status的錯誤
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
/usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [sapi/cgi/php-cgi] Err
usr 方法 pos track data- -m stat cgi error /usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [sapi/cgi/php-cg
QT5執行hello GUI遇到** cannot find -lGL** collect2: error: ld returned 1 exit status問題
執行環境:Qt Creator 4.5.0 Based on Qt 5.9.4 (GCC 5.3.1 20160406 (Red Hat 5.3.1-6), 64 bit) Ubuntu16.04中執行最簡單的hello程式,按照通用的教程將程式執行後 ,出現標題問題,百度
||error: ld returned 1 exit status| C++編譯時的問題
今天在用code::blocks寫C++時,遇到了||error: ld returned 1 exit status|,問題 搜了很多文章都不明白,最後看到有人說 Devc++中出現此問題,是由於連結使用make和編譯器(MinGw)中的連結(link)衝突導致的。突然想到了之前在工程中建
對‘sqrt’未定義的引用 collect2: error: ld returned 1 exit status
今天在呼叫數學庫函式的時候,在Linux中使用的編譯器中出現: /tmp/ccmfxE8L.o:在函式‘main’中: testcgen.c:(.text+0x23):對‘sqrt’未定義的引用 co
error: ld returned 1 exit status
fig 2.4 undefine 一個 去哪裏 安裝 ini set col [email protected]5437:~/Downloads/LBD_Descriptor/build$ cmake .. -- Configuring done -- Gene
linux系統應用編譯構建:make 、 make all 、 make clean 、 make install 區別
make,僅編譯; make install,編譯並安裝(比如安裝到/usr/bin目錄下,然後可以直接使用。因為/usr/bin只有管理員才能向裡面新增檔案,所以通常要加sudo) 這個要看你的Makefile的,約定俗成的而已 一般"潛規則" make就是make all,編譯用的,具
解決Ubuntu編譯error:fatal error: sys/cdefs.h: No such file or directory
64位的Ubuntu如果執行X86平臺32位編譯,gcc -m32 -o x x.c會報錯:fatal error: sys/cdefs.h: No such file or directory 解
gcc編譯選項:c++11 多執行緒編譯
c++11原生支援多執行緒程式設計,如下程式碼(假設檔名為test.cpp): #include <iostream> #include <future> using namespace std; int main() { auto fr0 =
linux下gcc編譯 .c檔案生成動態連結庫 .so檔案,並測試呼叫該連結庫
簡單介紹:linux中so檔案為共享庫,和windows下dll相似;so可以共多個程序呼叫,不同程序呼叫同一個so檔案,所使用so檔案不同;so原檔案不需要main函式;例項,1.通過mysqlTest.c中的函式mysql(),生成一個libmysql.so連結庫#inc
Navicat for mysql 1130錯誤 用Navicat連線遠端MYSQL:報錯ERROR 1130: Host '192.168.1.3' is not allowed to connec
Navicat for mysql 1130錯誤 用Navicat連線遠端MYSQL,提示如下錯誤,我以為是自己的防火牆問題,但是關了,依然不行。 我認為這段英文,有點誤導,讓人感覺是自己這邊出了問題。 看解決方法吧 ERROR 1130: Host '192.168.1.3' is not allo
ARP報文的傳送與接收(Linux下gcc編譯)
ARP報文的傳送與接收 這篇文章主要是關於ARP報文的傳送與接收,學習TCP/IP協議,還是多動手做一些測試對協議的理解比較深刻,所以自己寫了一份比較簡單的關於ARP的原始碼, 主要是起到記錄作用,方便以後回顧,當然,如果有大俠能提出問題,幫助我改進缺點是萬
【ndk】直接使用ndk提供的arm-linux-androideabi-gcc編譯android可執行程式
1、背景 經常使用linux交叉工具類的朋友都知道,在已安裝交叉編譯工具鏈後要交叉編譯得到linux可執行檔案只需要執行如下類似的命令(如編譯hello.c生成hello可執行檔案): arm-linux-gcc hello.c -o hellohello.c的程式碼非常
Linux下gcc編譯生成動態連結庫*.so檔案並呼叫它
動態庫*.so在linux下用c和c++程式設計時經常會碰到,最近在網站找了幾篇文章介紹動態庫的編譯和連結,總算搞懂了這個之前一直不太瞭解得東東,這裡做個筆記,也為其它正為動態庫連結庫而苦惱的兄弟們提供一點幫助。1、動態庫的編譯下面通過一個例子來介紹如何生成一個動態庫。這裡
Linux下GCC 編譯時如何指定連結庫
-l引數和-L引數 -l引數就是用來指定程式要連結的庫,-l引數緊接著就是庫名,那麼庫名跟真正的庫檔名有什麼關係呢?就拿數學庫來說,他的庫名是m,他的庫檔名是libm.so,很容易看出,把庫檔名的頭lib和尾.so去掉就是庫名了。當我們自已要用到一個第三方提供的庫名字libtest.so,那麼我們只要把lib
linux下GCC編譯C程式(一)
GCC的"-lm"選項,它告訴GCC檢視系統提供的數學庫(libm)。因為Linux和UNIX的系統函式庫通常以"lib"為字首,所以我們假設它存在。真正的函式庫位置隨系統的不同而不同,但它一般會位於目錄/lib或/usr/lib中,在這些目錄中還有數以百計的其他必需的系統函式庫。 4. 共享函式庫與靜態函
交叉編譯工具鏈-及arm-linux-androideabi-gcc編譯方法
一、編譯器: 就是將“高階語言”翻譯為“機器語言(低階語言)”的程式。一個現代編譯器的主要工作流程:原始碼 (source code) → 前處理器 (preprocessor) → 編譯器 (compiler) → 彙編程式 (assembler) →
OpenCV ARM移植(交叉編譯opencv) arm-oe-linux-gnueabi-gcc編譯opencv3.1.0
Cmake的安裝 OpenCV 2.2以後版本需要使用Cmake生成makefile檔案,因此需要先安裝cmake。 ubuntu下安裝cmake比較簡單, apt-get install cmake 如果覺得自帶的版本不符合要求,可以下載安裝包。 下載最新版的安裝