Eclipse C / C ++:在可执行项目中使用静态/共享库项目

时间:2013-01-31 19:54:51

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

我认为这个头衔几乎达到了重点。 我想要做的是写一个服务器。事情就是这样:

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

现在我想创建另一个项目“服务器”,它将这两个项目用作库。

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

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

感谢您的帮助!

修改

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

PARTLY SOLUTION:

*好吧现在编译......但执行暂时不起作用..

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

我必须从

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

#include "ServerThread.hpp"

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

  • Project Properties -> C/C++ General -> Path and Symbols -> Library Paths中的-L libs路径,

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

或手动:Project Properties -> C/C++ Build -> Settings -> [CGG/C/C++] Compiler -> Includes中的-I路径和Project Properties -> C/C++ Build -> Settings -> C++ Linker -> Libraries中的-L -l libs。

夹杂物

现在,您可#include使用<>""语法(将前者保留给系统库是一种很好的做法)。

Iussues

如果不在默认路径中移动/复制/符号链接库,则应该有执行问题,例如使用OSX,解决方案是在执行之前导出非默认路径(例如export DYLD_FALLBACK_LIBRARY_PATH=$DYLD_FALLBACK_LIBRARY_PATH:/non-default/lib/path OSX)。