如何解决连接错误“找不到-lgcc_s”

问题描述:

我有我使用,使静态库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

我觉得--是这里的问题:

-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

你有一个错字。不 - 整个归档应该是 - 无整个归档。修复拼写错误可修复链接器错误。

+0

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

关于到目前为止的评论:只需完全删除-Wl选项 。让g ++做它的事情。

至于没有找到与nm的符号测试,为什么你会期望 什么?你不使用它,你的程序并不需要它, 所以它不拉。(如果由于某种原因,你需要包括 未引用的对象文件,例如,由于静态初始化 将使它看得见,然后指定对象 文件---不把它放在一个库,这是 说法并不包括它,除非需要的标准方式)

- 詹姆斯甘孜

+0

我将实际使用'gpTest'。不是这种形式:它将是一个向量,其中包含有关与程序链接的静态库的所有版本信息。所以如果链接器抛弃'测试'这是一个问题。我认为这正是' - 全部归档'解决的问题。我错了吗? – nakiya 2010-10-08 08:41:05

整个档案的作品,你只是没有链接库。做正确的事情是:

ar cr libtest.a test.o 

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

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

刚一说明链接:全归档只适用于静态库(.a)中不具有共享库(的.so)是我的经验。

+0

将它作为评论而不是答案会更好。请看[如何回答](http://*.com/questions/how-to-answer)。 – 2012-11-12 03:11:31