相关疑难解决方法(0)

通过makefile传递gcc标志

我正在尝试使用llvm构建一个传递,并且我已经完成了构建llvm及其相关组件.但是,当我按照所有步骤构建包含makefile的传递后运行make时,我得到以下内容

在制作共享对象时,不能使用对"本地符号"的重定位R_X86_64_32; 用-fPIC重新编译

在通过谷歌搜索错误消息找到修复程序后,我发现这不是特定于llvm.一些解决方案建议我在运行configure时应该使用"--enable-shared",但这对我的情况没有帮助.现在我想重新构建llvm fPIC,正如错误所说的那样.但是如何使用makefile执行此操作?

gcc makefile llvm

16
推荐指数
2
解决办法
3万
查看次数

为什么使用 extern struct {} foo,用 g++ 触发无效的 fPIC 需要错误消息?

我正在构建一个共享库,它具有各自的代码和编译规则,如下所示:

// x.C
struct {
   short len;
   char s[32700];
   } foo;

// u.C
extern struct {
   short len;
   char s[32700];
   } foo;

void blah(void)
{
   foo.s[0] = 0 ;
}

$CXX -c x.C -fPIC
$CXX -c u.C -fPIC
$CXX -shared -o x.so.1 -Wl,-soname,x.so.1 x.o u.o
Run Code Online (Sandbox Code Playgroud)

此代码使用 intel (v13-v16) 编译器和 clang 编译器 (v3.6) 进行编译和链接,但使用 g++(版本 4.9.2)时出现链接错误:

u.o: relocation R_X86_64_PC32 against undefined symbol `foo' can not be used when making a shared object; recompile with -fPIC
Run Code Online (Sandbox Code Playgroud)

这里关于 -fPIC 的链接错误显然是错误的,因为代码是用 fPIC 编译的。我还在输出中看到符号的重定位记录objdump …

c++ gcc

5
推荐指数
1
解决办法
258
查看次数

标签 统计

gcc ×2

c++ ×1

llvm ×1

makefile ×1