g++編譯連結c語言檔案報錯“undefined reference ” 的處理
用QT寫一介面程式,其中用到另一同事寫的一個小功能,他是用c語言寫的,於是把他的程式碼標頭檔案和原始檔都copy過來了,加入工程中,結果連結的時候就總報錯 undefined reference 某個函式。再三確認了makefile檔案和原始碼,表示沒問題,後來想到或許是g++和gcc是不是編譯後不一樣啊,再上網一查,果然,g++編譯的.o檔案會在函式名加字首C語言好像無法識別(大概是這個意思,具體是怎樣的也沒細研究)
更正的方法就是在標頭檔案的首尾加上下面的紅色部分程式碼就行了,示例
#ifndef _IFCONFIG_H_H
#define _IFCONFIG_H_H
#ifdef __cplusplus
extern "C"
{
#endif
#include <stdio.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
extern char *G_wsIP[20];
extern int G_IPCount;
int getIPMASK();//不加紅色部分,就會在連結時找不到函式的定義
#ifdef __cplusplus
}
#endif
#endif
相關推薦
g++編譯連結c語言檔案報錯“undefined reference ” 的處理
用QT寫一介面程式,其中用到另一同事寫的一個小功能,他是用c語言寫的,於是把他的程式碼標頭檔案和原始檔都copy過來了,加入工程中,結果連結的時候就總報錯 undefined reference 某個函式。再三確認了makefile檔案和原始碼,表示沒問題,後來想到或許是g+
xcode上編譯c語言程序報錯:ld: x duplicate symbol for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
text internal self. value gen scrip info 內容 讀取 在網上查了一下: duplicate symbol的大概意思是,編譯器認為你重復定義了一些東西。 linker command failed with exit cod
windows(8) 下在GVIM中使用gcc/g++編譯除錯c/cpp檔案
1. 首先下載安裝MinGW,下載地址: http://sourceforge.net/projects/mingw/。這個是邊下載邊安裝的,下載完成即安裝完成。我的安裝目錄為D:\MinGW; 2. 設定系統環境變數。右擊Computer -> Properties
g++ 編譯連結C++程式碼, 生成與使用靜態庫和動態庫
例如我有A.cpp、A.h、main.cpp 三個檔案 編譯連結C++程式碼: 第一步:g++ -c A.cpp main.cpp 這樣就可以編譯A.cpp和main.cpp的程式碼生成A.o和main.o檔案【因為A.cpp包含了A.h的標頭檔案,所以一般編譯時
minigui:解決gvfb編譯報錯undefined reference to symbol 'XkbGetIndicatorState'
minigui在linux PC平臺建立開發環境時,需要Virtual Frame Buffer 支援(gvfb,qvfb),minigui官網提供了這兩個程式的原始碼,需要自己下載編譯並安裝到自己的PC上。 我用的是gvfb,minigui下載地址:http://www.minig
Clion lua 編譯報錯: undefined reference to `lual_newstate' 在win10上面編譯lua5.3.5以及解決方法
在CmakeLists.txt裡面新增: ``` include_directories("D:\\lua\\lua-5.3.5\\lua-5.3.5\\dist\\include") link_directories("D:\\lua\\lua-5.3.5\\lua-5.3.5
c++ template 多層繼承下找不到純虛擬函式實現 報錯:undefined reference to "xxx"
如下程式碼中,定義了3個類,ClassA,ClassB,ClassC,依次為被繼承關係,ClassA,ClassB是模板類, 在ClassA中定義了一個純虛擬函式getKeyFromObject,實現將從V中獲取K的功能: getKeyFromObject函
Linux 編譯報錯 -- undefined reference to 問題解決方法 (具體'pthread_create'和opencv看文章最後兩條)
最近在Linux下程式設計發現一個詭異的現象,就是在連結一個靜態庫的時候總是報錯,類似下面這樣的錯誤: (.text+0x13): undefined reference to `func' 關於undefined reference這樣的問題,大家其實經常會遇到
Linux 編譯報錯 undefined reference to `pthread_create'
在編譯Linux下多執行緒程式的時候出現錯誤資訊, 寫好程式碼,進行編譯時,出現如下錯誤提示資訊: thread.c:(.text+0xae): undefined reference to `pthread_create' thread.c:(.
Linux 編譯報錯 -- undefined reference to 問題解決方法 (具體'pthread_create'和opencv看文章最後兩條)
最近在Linux下程式設計發現一個詭異的現象,就是在連結一個靜態庫的時候總是報錯,類似下面這樣的錯誤: (.text+0x13): undefined reference to `func' 關於undefined reference這樣的問題,大家其實經常會遇
Linux編譯程式報錯 undefined reference to error 的解決方法
對於我這個剛入IT行業不就得新手來說,在linux下連結庫的時候總是會遇到各種各樣奇葩的問題,最多的就是“undefined reference to”和“cannot find”這兩類,層出不窮,總是在我即將完成工作的時候給我當頭一棒,讓我欲罷不能。這不,這幾天編譯linux下一個專案時又遇到難題
boost log 報錯undefined reference to boost::log::v2_mt_posix::basic_formatter
在編譯boost log檔案時報錯提示: undefined reference to `boost::log::v2_mt_posix::basic_formatter<char> boost::log::v2_mt_posix::parse_formatt
Makefile編寫執行問題,報錯undefined reference to `main'
Makefile檔案 CC=cc CFLAGS=-g -c OBJDIR=obj OBJS=func.o main_test.o go:$(OBJS:%=$(OBJDIR)/%) ${C
linux 用ld連結nasm編譯的elf格式的.o檔案報錯
編譯命令: nasm -f elf hello.asm -o hello.o ld -s hello.o -o hello 報錯資訊: ld: i386 architecture of input file `hello.o' is incompatible with i3
Linux學習之編譯執行.c(C語言)檔案
在Linux命令列介面下,建立檔案hello.c,進入vim編輯器,編輯一個簡單的C語言檔案 分解C語言檔案執行過程,要經過預編譯、編譯、彙編、連線四個步驟後才能執行, 預編譯:gcc -E hello.c -o hello.i 先
NDK編譯JNI檔案報錯implicit declaration of function 'RCCread' is invalid in C99 [-Wimplicit-function-declar
關於JNI報錯 I:/AndroidProject/APP4/ledtest/jni/com_topeet_ledtest_ad1256.c:32:14:警告:函式'RCCread'的隱式宣告在C99中無效[-Wimplicit-function-dec
C語言檔案操作 和 預編譯命令
//read檔案 int main(){ char *path = "D:\\friends.txt"; FILE *fp = fopen(path, "r"); char buff[500]; while (fgets(buff,50,fp)){ printf("%s\n", b
visual studio 2017裡發現的問題,為什麼C檔案不報錯,CPP檔案報錯
在visual studio 2017裡寫這個程式碼。如果寫的是C檔案,編譯不報錯也能執行。如果寫的是CPP檔案,編譯報錯且不能執行 嚴重性 程式碼 說明 專案 檔案 行 禁止顯示狀態 錯誤 C2440 “初始化”: 無法
tomcat編譯超過64k大小的jsp檔案報錯原因
今天遇到一個問題,首先是在tomcat中介軟體上跑的web專案,一個jsp檔案,因為程式碼行數實在是太多了,更新了幾個版本之後編譯報錯了,頁面開啟都是報500的錯誤,500的報錯,知道http協議返回碼的都知道,這是服務端的報錯。 jsp編譯過程是先編譯為servlet,然後再通過類載
解決 linux下編譯.sh檔案報錯 “[: XXXX: unexpected operator” 問題
原因:linux下能正常執行的指令碼,在ubuntu系統中都會編譯報錯,因為二者使用的直譯器不一同導致 Linux:.sh ubuntu:.dash 因為ubuntu預設的sh是連線到dash的,又因為dash跟bash的不相容所以出錯了.執行時可以把sh換成bash檔