【问题标题】:Creating dynamically loaded Linux libraries using Eclipse使用 Eclipse 创建动态加载的 Linux 库
【发布时间】:2010-10-31 07:13:54
【问题描述】:

我正在使用 Eclipse 用 C++ 编写程序。我想将它编译为 Linux 的库,类似于 Windows 中的 DLL。我怎么能做到这一点?您知道有关如何创建库的任何教程吗?

我只是想了解它类似于 Linux 的 DLL 以及如何创建它。我会感谢一个小例子。

【问题讨论】:

    标签: c++ c linux eclipse


    【解决方案1】:

    在 Linux 中,DLL 的等价物(无论如何)是共享对象 (.so)。

    你需要做这样的事情:

    $ g++ -c -fPIC libfile1.cpp
    $ g++ -c -fPIC libfile2.cpp
    $ g++ -shared -o libyourlib.so libfile1.o libfile2.o
    

    查看一些开源 C++ 库项目以获取更多信息。 GTKMM 就是其中之一。

    当然,强烈建议不要手动编译所有内容,而是使用 ma​​ke 文件IDE(例如 EclipseCDTKDevelop或{在此处选择您最喜欢的}),它将在幕后为您创建一个。

    【讨论】:

    • 您应该将 -fpic 或 -fPIC 选项添加到“g++ -c ...”调用中。这是为了生成“位置无关代码”,以便 Linux 可以在多个进程之间共享内存中的相同代码。
    【解决方案2】:

    在 UNIX/Linux 世界中,DLL 称为 shared libraries,通常具有 .so.o 扩展名。

    在共享库上查看 Linux HOWTO

    【讨论】:

    • .a 不是共享的,而是静态库
    • ,o 文件不是共享库——它们是目标文件
    • AIX 对目标文件和共享库都使用了“.o”。至少在 AIX 4.x 中是这样,不记得是 5。
    【解决方案3】:

    您可能想要更改符号的默认可见性。它可以提高性能。查看有关该主题的 GCC wiki 条目。

    还有一个由 Ulrich Drepper 在 2006 年编写的 paper,描述了在 UNIX 系统上实现动态共享对象的正确方法。

    【讨论】:

      猜你喜欢
      • 2020-02-27
      • 2014-09-21
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多