【问题标题】:Eclipse C/C++: Using static/shared library project in executable projectEclipse C/C++:在可执行项目中使用静态/共享库项目
【发布时间】:2013-06-22 09:43:30
【问题描述】:

我认为标题几乎达到了目的.. 我想做的是写一个服务器。事情是这样的:

我想将服务器的可分离部分分成不同的项目。例如,我想将项目“ServerNetworkStuff”和“ServerGameLogicStuff”创建为两个静态或共享库项目。

现在我想创建另一个使用这两个项目作为库的项目“服务器”。

Eclipse Projects:
- ServerNetworkStuff (static library)
- ServerGameLogicStuff (shared library)
- Server (using ServerNetworkStuff, ServerGameLogicStuff)

这可能吗?或者是否有任何等效的解决方案不会迫使我重新发明轮子?

感谢您的帮助!

编辑:

如果我在“项目 > 属性 > C/C++ 常规 > 路径和符号 > 引用”下添加对活动模式的引用,它将不起作用。编译器找不到头文件。如果我添加头文件的路径,我会得到“未定义的引用”错误。

部分解决方案:

*好的,现在可以编译了...但是目前执行不工作..

我首先创建了我的项目“服务器”(可执行文件)和 ServerNetwork(共享库)。添加对 Server 的 ServerNetwork 引用后,还有一些事情要做。

我必须从

更改我的包含
#include <include/ServerThread.hpp>

#include "ServerThread.hpp"

没有我在项目中使用的任何共享库的含义。只是将它更改为我自己的类的引用。

在我想要使用 ServerNetwork 的项目 Server 中,我需要添加 -lServerNetwork 和 -fPIC 作为 g++ 的参数。

此外,.so 文件包含的文件夹必须添加到库路径中(如果您添加特定项目作为参考,Eclipse 应该自动执行此操作)。*

【问题讨论】:

  • 当然这是可能的。你试过什么,什么没用?
  • @g-makulik 好吧.. 我创建了一个项目 ServerNetwork,它目前只有两个类。之后,我创建了另一个项目“Server”,它目前只包含一个 main.cpp,它尝试使用 ServerNetwork 中定义的类。如果我在 Path & Symbols 下添加另一个项目的头文件,我会收到符号未定义的编译器错误(这显然是因为我只引用了包含文件夹)。我不确定,如何正确地做到这一点。我确定我必须告诉 Eclipse 使用 ServerNetwork.so 文件,但我不知道如何..
  • 添加对其他项目的引用,而不仅仅是包含文件夹。 Eclipse 将完成剩下的工作......
  • @g-makulik 如果我在“项目 > 属性 > C/C++ 常规 > 路径和符号 > 参考”下添加对活动模式的引用,则它不起作用。编译器找不到头文件。如果我添加头文件的路径,我会得到“未定义的引用”错误。
  • 这不是通常的行为。我不认为它必须做某事。使用其中一个项目的共享库类型。可能是这样。 else 有更好的建议给你。在您的问题中描述该行为。

标签: c++ eclipse shared-libraries static-libraries


【解决方案1】:

Eclipse 中的引用仅适用于打开的项目。我发现最快的方法是在系统路径(/usr/local/include 或类似的)中添加或符号链接所需的头文件,或者只是添加它的路径,并对库做同样的事情。

如果您不想这样做(这应该是最好的选择),您仍然可以添加包含和库:

  • Project Properties -&gt; C/C++ General -&gt; Path and Symbols -&gt; Includes中的-I路径,

  • Project Properties -&gt; C/C++ General -&gt; Path and Symbols -&gt; Library Paths 中的 -L 库路径,

  • Project Properties -> C/C++ General -> Path and Symbols -> Libraries 中的 -l 库。

或者手动:Project Properties -&gt; C/C++ Build -&gt; Settings -&gt; [CGG/C/C++] Compiler -&gt; Includes 中的 -I 路径,Project Properties -&gt; C/C++ Build -&gt; Settings -&gt; C++ Linker -&gt; Libraries 中的 -L -l 库。

包含

现在您可以使用&lt;&gt;"" 语法来#include(将前者保留给系统库是一个很好的做法)。

问题

如果您不移动/复制/符号链接默认路径中的库,您应该会遇到执行问题,例如对于 OSX,解决方案是在执行前导出非默认路径(例如,export DYLD_FALLBACK_LIBRARY_PATH=$DYLD_FALLBACK_LIBRARY_PATH:/non-default/lib/path 用于 OSX) .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-02
    • 2015-06-29
    • 1970-01-01
    • 2019-11-11
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多