Mar*_*are 25 c++ g++ 32bit-64bit
所以我一直在32位编码,昨天我需要构建一个DLL,我有几个问题.无论如何我在这里解决了他们.
不幸的是,即使我认为一切工作毕竟我发现,情况并非如此,当我提出我的程序和其他计算机上生成文件是什么在64位上运行,你可以猜到发生了什么事?
所以我的问题与64位的重定位有关
/usr/bin/ld: MyClass.o: relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
MyClass.o: could not read symbols: Bad value
Run Code Online (Sandbox Code Playgroud)
这是我的makefile
MyProgram: main.o chkopts
-${CLINKER} -o $@ $< ${MYLIB} ${PETSC_MAT_LIB}
${RM} main.o
export LD_LIBRARY_PATH=${LIBADD}:$LD_LIBRARY_PATH
LibMyProgram.so: MyClass.o chkopts
-${CLINKER} -shared -Wl,-soname,${SONAME} -o ${VERS} *.o ${PETSC_MAT_LIB}
mv ${VERS} ${LIBADD}
ln -sf ${LIBADD}${VERS} ${LIBADD}${SOWOV}
ln -sf ${LIBADD}${VERS} ${LIBADD}${SONAME}
Run Code Online (Sandbox Code Playgroud)
我试图在CFLAGS,CPPFLAGS甚至LDFLAGS中添加-fPIC.我也尝试在-shared标志之前和之后添加-fPIC.
-${CLINKER} -shared -fPIC -Wl,-soname,${SONAME} -o ${VERS} *.o ${PETSC_MAT_LIB}
Run Code Online (Sandbox Code Playgroud)
但我会像以前一样得到同样的错误.
如果我使用CFLAGS = -fPIC,我会得到一点同样的错误:
.../petsc/petsc-3.2-p6/arch-linux2-cxx-debug/lib/libpetsc.a(err.o): relocation R_X86_64_32 against `ompi_mpi_comm_self' can not be used when making a shared object; recompile with -fPIC.
Run Code Online (Sandbox Code Playgroud)
我已经阅读了与我的问题甚至远程相似的所有主题,但我一直无法解决这个问题.