如何解决连接错误“找不到-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++。无法让这个工作。这完全归功于 - 整个归档标志。但是我离不开它。
我觉得--
是这里的问题:
-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
关于到目前为止的评论:只需完全删除-Wl选项 。让g ++做它的事情。
至于没有找到与nm的符号测试,为什么你会期望 什么?你不使用它,你的程序并不需要它, 所以它不拉。(如果由于某种原因,你需要包括 未引用的对象文件,例如,由于静态初始化 将使它看得见,然后指定对象 文件---不把它放在一个库,这是 说法并不包括它,除非需要的标准方式)
- 詹姆斯甘孜
我将实际使用'gpTest'。不是这种形式:它将是一个向量,其中包含有关与程序链接的静态库的所有版本信息。所以如果链接器抛弃'测试'这是一个问题。我认为这正是' - 全部归档'解决的问题。我错了吗? – nakiya 2010-10-08 08:41:05
整个档案的作品,你只是没有链接库。做正确的事情是:
ar cr libtest.a test.o
与
-Wl,--whole-archive -L/home/dumindara/intest/ -ltest
是的。德米特里尤达科夫和你的先生是对的! – nakiya 2010-10-08 11:34:38
刚一说明链接:全归档只适用于静态库(.a)中不具有共享库(的.so)是我的经验。
将它作为评论而不是答案会更好。请看[如何回答](http://*.com/questions/how-to-answer)。 – 2012-11-12 03:11:31
您似乎忘记了实际的错误信息? :) – 2010-10-08 07:18:17
:D。是的,忘记了错误。添加。 – nakiya 2010-10-08 07:20:30