Dan*_*son 6 c++ linker compilation ld
我应该使用数据分析程序进行物理实验.我不能让它编译.
代码很旧,与我能找到的当前GCC版本不兼容.为了让事情更加节省时间,我从一个修改了所有makefile的人那里获得了代码,以便在Mac上编译.我没有C++经验,但是有了man-pages,Google和耐心,我已经修复了很多错误,但是我坚持这个,即使经过一周的尝试和谷歌搜索.
我相信相关的错误信息如下:
/usr/bin/ld: error in /home/daniel/skola/exjobb/miniballscripts
/lib/libCommandLineInterface.so(.eh_frame); no .eh_frame_hdr table will be created.`
Run Code Online (Sandbox Code Playgroud)
可能是什么原因,可以采取什么补救措施?
libCommandLineInterface.so 我之前编译过,没有任何明显的错误消息:
$ make
g++ -g2 -O2 -I./ -c CommandLineInterface.cc -o CommandLineInterface.o
g++ -g -Wl -o /home/daniel/skola/exjobb/miniballscripts/lib/libCommandLineInterface.so
CommandLineInterface.o -lm -L/home/daniel/skola/exjobb/miniballscripts/lib -lgcc -lc
Done
Run Code Online (Sandbox Code Playgroud)
我的g ++ - 版本是g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3,amd64.
正如我所说,我没有使用C++的经验,所以也许我天真的Makefile修改已经破坏了一些东西.我缺乏经验也使我不知道需要哪些其他信息来帮助我,但我很乐意回答.
看起来您-shared在生成libCommandLineInterface.so文件时忘记了命令行选项。这可以解释那些多重定义错误。如果链接器认为它生成的文件是可执行文件(而不是动态库),那么它将链接到启动代码等。当您尝试使用此 .so 文件时,这些符号来自启动代码将与添加到使用动态库的可执行文件中的内容发生冲突。
libTransfer.so 错误可能与省略相同标志有关。共享库允许有悬空引用(在使用库时解析),但可执行文件必须在链接时解析所有符号。这可能过于简单化了事情的本质,但我从来不需要深入了解 Linux 中动态链接的更多细节。:) 无论如何,添加-shared选项也可以解决未定义的引用错误。
| 归档时间: |
|
| 查看次数: |
15730 次 |
| 最近记录: |