草庐IT

linux - 使用 "ar"合并 .o 和 .a 文件 (Linux)

我正在尝试创建一个静态库,其中包含目标文件和现有静态库,这些库都已在构建过程的早期编译。有没有一种简单的方法可以使用“ar”来执行此操作,或者我是否需要解压(arxlibrary_name)每个库并将其目标文件添加到我的统一库中? 最佳答案 如果你想创建一个共享库,你可以使用这个:您可以使用ld中的--whole-archive标志:--whole-archiveForeacharchivementionedonthecommandlineafterthe--whole-archiveoption,includeeveryobjec

linux - 构建一个使用 ld 的选项 -rpath 和 $ORIGIN 的简单(hello-world-esque)示例

注意:下面是完整的工作示例。原始问题如下:我在将ld的-rpath参数与$ORIGIN一起使用时遇到问题。由于找不到完整的例子,我想我会尝试自己写一个,以便我和其他人以后可以使用它。一旦我开始工作,我会整理它。我askedaboutthisbefore,但我认为我的帖子有点令人困惑。示例项目构建了一个共享库和一个链接到所述库的可执行文件。它非常小(3个文件,22行,包括构建脚本)。您可以从here下载该项目。文件结构(构建前):项目/源/foo.cppmain.cppmake.shproject/src/foo.cppintfoo(){return3;}project/src/main

linux - 构建一个使用 ld 的选项 -rpath 和 $ORIGIN 的简单(hello-world-esque)示例

注意:下面是完整的工作示例。原始问题如下:我在将ld的-rpath参数与$ORIGIN一起使用时遇到问题。由于找不到完整的例子,我想我会尝试自己写一个,以便我和其他人以后可以使用它。一旦我开始工作,我会整理它。我askedaboutthisbefore,但我认为我的帖子有点令人困惑。示例项目构建了一个共享库和一个链接到所述库的可执行文件。它非常小(3个文件,22行,包括构建脚本)。您可以从here下载该项目。文件结构(构建前):项目/源/foo.cppmain.cppmake.shproject/src/foo.cppintfoo(){return3;}project/src/main

linux - Haskell ghc 编译/链接错误,未创建可执行文件。 (Linux)

我用haskel编写了一个基本的helloworld程序,并尝试用以下代码编译它:ghc文件名.hs。它生成.hi和.o文件但没有可执行文件并显示链接器中的错误:marox@IT-marox:~/Marox$ghctupel.hsLinkingtupel.../usr/bin/ld:--hash-size=31:unknownoption/usr/bin/ld:usethe--helpoptionforusageinformationcollect2:ldreturned1exitstatus谷歌搜索没有返回任何有用的信息。我在ubuntu12.04上。我该如何解决这个问题?

linux - Haskell ghc 编译/链接错误,未创建可执行文件。 (Linux)

我用haskel编写了一个基本的helloworld程序,并尝试用以下代码编译它:ghc文件名.hs。它生成.hi和.o文件但没有可执行文件并显示链接器中的错误:marox@IT-marox:~/Marox$ghctupel.hsLinkingtupel.../usr/bin/ld:--hash-size=31:unknownoption/usr/bin/ld:usethe--helpoptionforusageinformationcollect2:ldreturned1exitstatus谷歌搜索没有返回任何有用的信息。我在ubuntu12.04上。我该如何解决这个问题?

c - ELF 对象文件和共享对象之间的 ELF header 有哪些区别?

首先,我是从技术角度而不是库代码用户的角度来问这个问题。差异的一个例子是共享对象包含程序头,而普通对象文件不包含。还有哪些区别?至于我的问题的目的,我试图弄清楚需要从共享目标文件中删除哪些内容才能让链接器将其视为普通目标文件并尝试将其重新定位和静态链接到生成的可执行文件,而不是将其标识为共享库并生成DT_NEEDED引用。这反过来又是将共享库原始“转换”为可以静态链接的东西的第一步(但是,可能需要进一步的工作来使重定位可满足)。 最佳答案 您会发现其中一个主要区别是,在最后的链接阶段,许多C库组件静态链接到库中,形成INIT和FIN

c - ELF 对象文件和共享对象之间的 ELF header 有哪些区别?

首先,我是从技术角度而不是库代码用户的角度来问这个问题。差异的一个例子是共享对象包含程序头,而普通对象文件不包含。还有哪些区别?至于我的问题的目的,我试图弄清楚需要从共享目标文件中删除哪些内容才能让链接器将其视为普通目标文件并尝试将其重新定位和静态链接到生成的可执行文件,而不是将其标识为共享库并生成DT_NEEDED引用。这反过来又是将共享库原始“转换”为可以静态链接的东西的第一步(但是,可能需要进一步的工作来使重定位可满足)。 最佳答案 您会发现其中一个主要区别是,在最后的链接阶段,许多C库组件静态链接到库中,形成INIT和FIN

linux - 大师们说 LD_LIBRARY_PATH 不好——有什么选择?

我阅读了一些关于使用LD_LIBRARY_PATH的问题的文章,即使作为包装脚本的一部分也是如此:http://linuxmafia.com/faq/Admin/ld-lib-path.htmlhttp://blogs.oracle.com/ali/entry/avoiding_ld_library_path_the在这种情况下-推荐的替代方案是什么?谢谢。 最佳答案 您可以尝试添加:-Wl,-rpath,path/to/lib链接器选项。这将使您无需担心LD_LIBRARY_PATH环境变量,并且您可以在编译时决定指向特定的库。对

linux - 大师们说 LD_LIBRARY_PATH 不好——有什么选择?

我阅读了一些关于使用LD_LIBRARY_PATH的问题的文章,即使作为包装脚本的一部分也是如此:http://linuxmafia.com/faq/Admin/ld-lib-path.htmlhttp://blogs.oracle.com/ali/entry/avoiding_ld_library_path_the在这种情况下-推荐的替代方案是什么?谢谢。 最佳答案 您可以尝试添加:-Wl,-rpath,path/to/lib链接器选项。这将使您无需担心LD_LIBRARY_PATH环境变量,并且您可以在编译时决定指向特定的库。对

linux - ld : Using -rpath, $ORIGIN 在共享库中(递归)

我刚刚做了一个使用ld的-rpath的基本示例带有$ORIGIN的选项here(有关工作版本,请参阅第二个响应)。我正在尝试创建一个示例,其中main.run链接到foo.so,它又链接到bar.so,全部使用rpath和$ORIGIN.运行时文件结构是:project/lib/dir/sub/bar.sofoo.sorun/main.run(failingtobuild)我正在构建foo.so使用:g++-c-oobj/foo.osrc/foo.cpp-fPICg++-shared-olib/dir/foo.soobj/foo.o-Wl,-soname,foo.so-Wl,-rpat