1. 程式人生 > >已成功連線到庫卻undefined reference to 錯誤

已成功連線到庫卻undefined reference to 錯誤

遇到了一個非常詭異的事情,makefile 已經寫好:
`cppflags=
headers=-I ../../inc
libs=-lpuck -L ../../lib

../bin/input: input.cpp
mkdir -p ../bin
g++ $(cppflags) $(headers) $(libs) -o $@ $^`

本來這個makefile 在centos下是沒有問題的,然而在ubuntu下出現了問題,雖然已經成功連結到庫檔案,但是還是會有undefined reference to的錯誤,通常來講,這種問題只會沒有成功連線到庫檔案的時候才會出現,gcc/++在編譯時查詢庫檔案的順序是:
1、-L 指定的路徑, 從左到右依次查詢
2、由 環境變數 LIBRARY_PATH 指定的路徑,使用”:”分割從左到右依次查詢
3、/etc/ld.so.conf 指定的路徑順序
4、/lib 和 /usr/lib (64位下是/lib64和/usr/lib64)

所以我這個makefile直接就滿足了第一條,但還是有錯誤,在網上查了一下,竟然調整了一下連線選項的位置就可以了!!:
`cppflags=
headers=-I ../../inc
libs=-lpuck -L ../../lib

../bin/input: input.cpp
mkdir -p ../bin
g++ -o $@ $^ $(cppflags) $(headers) $(libs) `
不知道這是什麼原因,看來是不同系統下這個gcc/++實現也是有所差距,有知道的還望指明原因。。

有一點眉目,但也不能解釋現在這個問題,對於-l連結庫的順序,編譯器是從右往左連線的,如果連結庫之間有依賴關係,應當注意連結庫的順序,比如 庫A 依賴 庫B,那麼寫成 -lB -lA就會報錯。

相關推薦

成功連線undefined reference to 錯誤

遇到了一個非常詭異的事情,makefile 已經寫好: `cppflags= headers=-I ../../inc libs=-lpuck -L ../../lib ../bin/input: input.cpp mkdir -p

關於Cmake 連結靜態出現undefined reference to錯誤

在編寫一個C++專案的時候,使用cmake管理工程,成功連結一個靜態庫,但是在編譯時仍然出現undefined reference to 的錯誤。 最終發現問題是由於c和c++混編導致的。 解決方案: 由於我連結的庫是使用c語言編寫,所以需要在include標頭檔案時加上 #

Android.mk 連結undefined reference to錯誤處理

我們在編譯Android JNI的時候,經常要連結一些其他的開源庫,總是會碰到undefined reference to的問題。一般編譯器報 “undefined reference to”的錯誤是以下幾種情況。1 沒有指定對應的庫(.o/.a/.so) 使用了庫中定義的實

靜態呼叫靜態&靜態載入靜態------談談undefined reference to和linker input file unused because linking not done

          靜態庫可以呼叫靜態庫嗎? 靜態庫可以載入靜態庫嗎?  搞清這些東西, 對於linux開發很重要, 本文我們來探討這些問題。           先看程式:           business.h: #include <iostream>

codeBlocks編譯undefined reference to錯誤解決

      codeBlocks它輕巧,強大,跨平臺,是我繼在使用VC6.0之後很歡喜的一個IDE,VC6.0已經很老了,我也很建議大家使用Codeblocks這個優雅清新的C語言程式設計軟體。 codeBlocks編譯undefined reference to錯

undefined reference to 錯誤的解決方法總結

在編寫C++時,會遇到一類錯誤的錯。 總結起來為幾類 一、是 Linux環境錯誤  具體沒有深入研究,可以參考http://blog.csdn.net/cserchen/article/details/5503556。 二、使用codeblock這類需要自己配置路徑,要把所

Qt 訊號發射部分 undefined reference to錯誤

在使用訊號與槽很容易發生 undefined reference to 發射訊號  ①繼承QObject ②新增Q_OBJECT ③執行qmake ④構建 然後就可以執行啦!但是不知道是為什麼,悄咪咪放在這裡做個記錄 。 1 #ifndef TIMERWRITEFILE_H 2 #defin

gcc "undefined reference to" 問題解決方法(使用

最近在Linux下程式設計發現一個詭異的現象,就是在連結一個靜態庫的時候總是報錯,類似下面這樣的錯誤: (.text+0x13): undefined reference to `func' 

Android系統編譯so提示error undefined reference to '__android_log_print問題的解決

在系統原始碼的hardware/qcom下增加psam資料夾,編譯原始碼要生成libpsam.so庫,Android.mk內容 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)   LOCAL_MODULE &n

linux 連結 靜態 undefined reference to

最近將專案移植到linux上,工程需要依賴三個靜態庫:libprojcommon.a libluabind.a liblua.a 依賴關係是projcommon依賴luabind,luabind依賴lua,所以專案最終的連結引數是這樣的: -L/home/boy/ProjCommon/lib -lproj

linux 連結檔案出現“undefined reference to" 問題的解決方法

最近在Linux下程式設計發現一個詭異的現象,就是在連結一個靜態庫的時候總是報錯,類似下面這樣的錯誤: (.text+0x13): undefined reference to `func'      關於undefined reference這樣的問題,大家其實經常會遇

連線時出錯,(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'

歡迎交流 E-mail:ce123#126.com(#->@) QQ:350725201 嵌入式開發交流群: (1)280352802(已滿) (2)289195589 宣告:版權所有,歡迎轉載! 轉載請註明出處:http://blog.csdn.net/ce123

linux下編譯自己的靜態時依賴其他的動態,使用時出現“undefined reference to

        對於我這個剛入IT行業不就得新手來說,在linux下連結庫的時候總是會遇到各種各樣奇葩的問題,最多的就是“undefined reference to”和“cannot find”這兩類,層出不窮,總是在我即將完成工作的時候給我當頭一棒,讓我欲罷不能。這不,這

ubuntu 下沒有pthread以及報undefined reference to 'pthread_create'的解決方法

最近在Ubuntu下編譯一個程式,需要使用多執行緒庫pthread,但是編譯時總是提示“undefined reference to 'pthread_create'”的錯誤,如下圖所示: 要解決這

一個難解的undefined reference to xxx 讓我決定永遠告別json, 轉而用開源的RapidJson

        最近, 需要用json庫來解析一個json串, 這是多麼簡單的事情啊, 而且我以前經常這麼幹。         可是, 我卻遇到了undefined reference to xxx這樣一個問題。 這個, 我已經很熟悉了, 肯定是沒有包含對應的json靜態庫

linux下開發,解決cocos2d-x中編譯出現的一個小問題, undefined reference to symbol &#39;pthread_create@@GLIBC_2.2.5&#39;

water span x86 code bject data- ace 技術分享 inux 解決cocos2d-x中編譯出現的一個小問題 對於cocos2d-x 2.×中編譯中,若頭文件裏引入了#include "cocos-ext.h",在進行C++編譯的時候會遇到例

[ c++] cmake 編譯時 undefined reference to `std::cout' 錯誤的解決方案

bin cut () cmake fin epo linking com urn cmake .. 和 make 之後,出現如下錯誤 Linking CXX executable ../../../bin/ModuleTest CMakeFiles/Modu

Linux下運行《UNIX環境高級編程》undefined reference to `err_quit 編譯出錯的處理方法

reg init def bre linux tput linux下 pan termios 錯誤信息: : undefined reference to `err_quit‘: undefined reference to `err_sys‘ 解決方法: 因為err

caffe日常坑系列之:undefined reference to symbol '_ZN2cv6String10deallocateEv'

iss ren and tor ssi symbols str mis locate 在使用caffe庫編譯C++時出現的 解決如下: /usr/bin/ld: /tmp/ccA5JGRP.o: undefined reference to symbol ‘_ZN2cv

求助codeblocks高手,解決undefined reference to問題

inf ren blank pic 解決 deb i94 weibo lan F44M73褂壓臼7MCAhttp://www.docin.com/sina_6370744687 2萍ZL5乃l7凍V徽3http://docstore.docin.com/uht219 1