Eclipse,构建共享库的最佳方式?

Posted

技术标签:

【中文标题】Eclipse,构建共享库的最佳方式?【英文标题】:Eclipse, best way to build shared library? 【发布时间】:2014-01-03 13:15:32 【问题描述】:

我对 C++ 和使用 eclipse 比较陌生。

我在 Visual Studio 2012 中有一个带有 C++/CLI 包装器的本机 C++ 静态库

现在我正在使用 Eclipse(Juno Service Release 2)和 GCC 4.2.4 在 Linux 中构建 Native C++ 代码。

我在 Eclipse 中创建了一个共享库空项目,并添加了我所有的 .h 和 .cpp 文件,然后让 Eclipse 进行构建。但是我得到了错误

relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC

我在Project->Settings->GCC C++ Compiler->Miscellaneous->Other Flags中添加了-fPIC标志。

我不知道任何人精通 Linux/Eclipse,所以我不确定我选择了最佳路径。

有没有比我刚才描述的方式更好/“更正确”的方式来构建共享库? 我采取的方法有什么问题吗?

【问题讨论】:

【参考方案1】:

添加-fPIC 是正确的做法,应该没问题。

共享库需要在加载时重新定位(通过ldd),主要有两种方法:加载时重新定位和位置无关代码 (PIC),后者是现代解决方案和架构中的主流。

【讨论】:

和我一样使用 Eclipse?允许它创建它的makefile和所有东西,那也应该没问题?或者如果我自己创建一个makefile并创建一个“具有现有代码的Makefile项目”会更好? 我认为使用 Eclipse 的“共享库”项目很好。如果您对 Makefile/s 感到满意,那么直接管理某些方面会更容易,但是您没有在问题中提到任何具体的复杂性(除了 -fPIC),所以我认为您应该同时继续使用 Eclipse。此外,谷歌“用 Eclipse 构建共享库”我刚刚做了,并且出现了许多好的页面。

以上是关于Eclipse,构建共享库的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章

静态库和共享库的区别?

如何使用共享库构建 vtkLocal 示例?

一种以动态库的方式使用资源表的方案

如何以编程方式查找已加载共享库的版本?

处理共享库版本控制、部署和使用的最佳方式

我不知道如何使用 Apache Ivy