2010-10-08 120 views
0

我有我使用,使靜態庫3個小文件和應用程序:如何解決連接錯誤「找不到-lgcc_s」

test.h

#ifndef TEST_H 
#define TEST_H 

class Test 
{ 
    public: 
     Test(); 
}; 

extern Test* gpTest; 

#endif 

TEST.CPP

#include "test.h" 

Test::Test() 
{ 
    gpTest = this; 
} 

Test test; 

main.cpp中

#include "test.h" 
#include <iostream> 

using namespace std; 

Test* gpTest = NULL; 

int main() 
{ 
    return 0; 
} 

BUILD

g++ -c test.cpp -o test.o 
ar cr test.a test.o 
g++ -c main.cpp -o main.o 
g++ main.o -o app -Wl,--whole-archive -L/home/dumindara/intest/test.a -Wl,-no--whole-archive 

ERROR(聯工序)

/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld: cannot find -lgcc_s 
collect2: ld returned 1 exit status 

我嘗試一切:使用-static-libgcc中和鏈接以靜態libstdC++。無法讓這個工作。這完全歸功於 - 整個歸檔標誌。但是我離不開它。

+0

您似乎忘記了實際的錯誤信息? :) – 2010-10-08 07:18:17

+0

:D。是的,忘記了錯誤。添加。 – nakiya 2010-10-08 07:20:30

回答

5

我覺得--是這裏的問題:

-Wl,-no--whole-archive 

嘗試用

-Wl,-no-whole-archive 

編輯

關於與納米應用您的應用程序沒有看到測試符號:我覺得你不需要-L,因爲你給了test.a的完整路徑和名稱 - 做

-Wl,--whole-archive -L/home/dumindara/intest/ -ltest -Wl,-no-whole-archive 

-Wl,--whole-archive /home/dumindara/intest/test.a -Wl,-no-whole-archive 
+0

是的,它現在鏈接好了。但是我仍然無法在'nm app'的應用程序中看到'test'符號。該怎麼辦? – nakiya 2010-10-08 07:41:38

+0

@nakiya見我編輯 – 2010-10-08 07:50:13

+0

謝謝德米特里,你救了我的命!這個lib實際上並沒有被我喜歡。現在它工作正常。 :D – nakiya 2010-10-08 10:28:04

6

你有一個錯字。不 - 整個歸檔應該是 - 無整個歸檔。修復拼寫錯誤可修復鏈接器錯誤。

+0

Arrrgh !!!愚蠢的我... – nakiya 2010-10-08 07:39:26

4

關於到目前爲止的評論:只需完全刪除-Wl選項 。讓g ++做它的事情。

至於沒有找到與nm的符號測試,爲什麼你會期望 什麼?你不使用它,你的程序並不需要它, 所以它不拉。(如果由於某種原因,你需要包括 未引用的對象文件,例如,由於靜態初始化 將使它看得見,然後指定對象 文件---不把它放在一個庫,這是 說法並不包括它,除非需要的標準方式)

- 詹姆斯甘孜

+0

我將實際使用'gpTest'。不是這種形式:它將是一個向量,其中包含有關與程序鏈接的靜態庫的所有版本信息。所以如果鏈接器拋棄'測試'這是一個問題。我認爲這正是' - 全部歸檔'解決的問題。我錯了嗎? – nakiya 2010-10-08 08:41:05

0

整個檔案的作品,你只是沒有鏈接庫。做正確的事情是:

ar cr libtest.a test.o 

-Wl,--whole-archive -L/home/dumindara/intest/ -ltest 
+0

是的。德米特里尤達科夫和你的先生是對的! – nakiya 2010-10-08 11:34:38

0

剛一說明鏈接:全歸檔只適用於靜態庫(.a)中不具有共享庫(的.so)是我的經驗。

+0

將它作爲評論而不是答案會更好。請看[如何回答](http://stackoverflow.com/questions/how-to-answer)。 – 2012-11-12 03:11:31

相關問題