-fPIC
编译静态库,但我不知道如何告诉链接器我不会使用静态库中的符号。以下是我的问题说明和文件示例:文件
foo.cpp
:#include "static.h"
using namespace std;
string version_info()
{
return static_version_info();
}
文件 static.cpp
:
#include"static.h"
#include <vector>
using namespace std;
string static_version_info()
{
std::vector<int> ivec;
return to_string(ivec.size());
}
文件 static.h
:
#ifndef STATIC_H
#define STATIC_H
#include<iostream>
using namespace std;
std::string static_version_info();
#endif
然后执行。
$ g++ -c foo.cpp -o foo.o -fPIC
$ g++ -c static.cpp -o static.o
$ gcc-ar rcs static.a static.o
$ g++ -shared foo.o static.a
/usr/bin/ld: static.a(static.o): relocation R_X86_64_PC32 against symbol `_ZNSt6vectorIiSaIiEEC1Ev' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
问题: 如何调整最后一个命令,使我不会出现错误?这可能吗?
请注意,我不想使用 -fPIC
编译 static.cpp
, 我也不需要在共享库中使用符号 (这里是 return_static_version_info()
)。
-fPIC
。 - phinz