Edu*_*rdo 21 makefile recompile fpic
我做make时遇到这个错误:
relocation R_X86_64_32 against `vtable for Torch::MemoryDataSet' can not be used
when making a shared object; recompile with -fPIC
Run Code Online (Sandbox Code Playgroud)
它说我应该重新编译-fPIC选项.我这样做,将-fPIC选项添加到CFLAGS和CXXFLAGS,但我仍然得到相同的错误.有什么方法可以解决这个问题吗?我已经看到这个问题与使用64位机器有关,而且我确实使用了一个.
我遇到了同样的问题,但它有一个额外的转折。@clintm 的答案解决了它,但我想我会在这里描述我的问题变化以供将来参考......
32 位机器上的 Makefile:
CXX=g++
CXXFLAGS= -O3 -Wall
...
...
%.o: %.c
$(CXX) $(CXXFLAGS) -fpic -c $<
libmylibrary.so: $(OBJECTS)
$(CXX) -shared -Wl,-soname,$@ -o $@ $(OBJECTS)
Run Code Online (Sandbox Code Playgroud)
这编译正确。但是当我在 64 位机器上尝试它时,同样的 Makefile 失败了。我将“-fpic”更改为“-fPIC”,但它仍然失败。我将对象规则更改为:
%.o: %.c
$(CXX) -fPIC $(CXXFLAGS) -c $<
Run Code Online (Sandbox Code Playgroud)
它仍然失败。
最后,我在实际的编译器的变量置于“-fPIC”(使得现在的“-fPIC”出现在每个对象的规则和用于共享库中的规则):
CXX=g++ -fPIC
CXXFLAGS= -g -O3 -Wall
...
%.o: %.c
$(CXX) $(CXXFLAGS) -c -o $@ $<
libalglib.so: $(OBJECTS)
$(CXX) -shared -Wl,-soname,$@ -o $@ $(OBJECTS)
Run Code Online (Sandbox Code Playgroud)
它奏效了!
| 归档时间: |
|
| 查看次数: |
25837 次 |
| 最近记录: |