在C++中使用来自另一个项目的类
Using a class from another project in C++
我有权访问一个大型C++项目,该项目充满了文件,并且由automake&朋友
以下是目录结构的概念。
otherproject/
folder1/
some_headers.h
some_files.cpp
...
folderN/
more_headers.h
more_files.cpp
build/
lots_of things here
objs/
lots_of_stuff.o
an_executable_I_dont_need.exe
my_stuff/
my_program.cpp
我想使用大项目中的一个类,在say中声明为"some_header.h"
/* my_program.cpp */
#include "some_header.h"
int main()
{
ThatClass x;
x.frobnicate();
}
我通过煞费苦心地向gcc传递大量的"-I"选项来编译我的文件,这样它就可以找到的所有头文件
g++ my_program.cpp -c -o myprog.o -I../other/folder1 ... -I../other/folderN
当涉及到编译时,我必须手动包括他所有的".o",这可能是过度的
g++ -o my_executable myprog.o ../other/build/objs/*.o
然而,我不仅要手动从列表中删除他的"main.o",而且这还不够,因为我忘了链接他碰巧使用的所有库。
otherproject/build/objs/StreamBuffer.h:50: undefined reference to `gzread'
在这一点上,我开始觉得我可能做错了什么我应该如何继续?这种问题通常是什么,最好的解决方法是什么
我需要这一点来在Linux上工作,以防需要做一些特定于平台的事情。
通常,项目的.o
文件应组合到一个库中(在Linux上,如果是静态库,则为.a
文件,如果是动态库,则使用.so
文件),然后使用-L
选项指定位置并使用-l
选项指定库名来链接到库。
例如,如果库文件位于/path/to/big_project/libbig_project.a
,则可以将选项-L /path/to/big_project -l big_project
添加到gcc命令行中。
如果项目没有可链接的库文件(例如,它不是库,而是可执行程序,并且您只想要可执行程序使用的一些代码),您可能需要尝试要求项目作者创建这样的库文件。(如果他/她熟悉"automake and friends",对他来说应该不会太麻烦),或者尝试自己创建。
EDIT另一个建议是:您说过该项目附带一个makefile。尝试使用makefile对make
进行处理,看看它的编译器命令行是什么样子的。它是否也有许多包含和单独的对象文件?
将未作为库开发的应用程序视为库是不可能工作的。作为一个随意的例子,省略main
可能最终会剪切出您想要的类所依赖的初始化代码。
在这里,负责任的事情是阅读代码,理解它,并将您想要的功能转化为一个合适的库。使用调试符号构建"不需要的exe",并在类的构造函数和方法中设置断点。进入它们,这样你就可以掌握程序的功能,以及程序的哪些部分与你的需求相关和无关。
希望代码处于某种支持分支的版本控制系统(如Git)下。如果没有,请创建自己的存储库。编辑这些文件,直到您将它们组织成一个库和使用该库的代码。确保它在原始程序的上下文中正常工作。然后转身在你自己的程序中使用这个库。
如果你做得很好,你可能能够说服原始作者接受分离回到他们的原始代码库中。如果没有,至少版本控制支持您,这样您就可以管理未来更改的集成。
- 运行同一解决方案的另一个项目的项目
- 是否可以将 EXE 文件作为 lib 文件链接到另一个项目?
- 如何使用另一个项目命名空间?
- 单元测试类无法在我要测试的同一解决方案中的另一个项目中找到类
- 如果我尝试将对话框从一个项目移动到另一个项目,我是否需要从 rc 文件中复制 DESIGNINFO、对话框信息和AFX_
- OpenCV:文件存储操作员">>"在一个项目中工作,但不在另一个项目中工作(在同一类上)
- 如何将另一个项目中用 C 编写的源代码包含在我自己的项目中,C++在 Visual Studio 中
- 将过滤器中的所有.cpp和.h移动到另一个项目并更正其文件夹位置
- 在另一个项目中包括继承的类时,抽象类的链接器错误
- 创建在另一个项目中定义的类对象
- 如何在不复制的情况下将C++类从一个项目重用到另一个项目
- Cmakelist仅用于标题项目,并将其用于另一个项目
- 在另一个项目中将模板函数用作dll
- 在同一解决方案但不同配置的另一个项目中使用一个类
- 未解析的外部符号来自一个项目中的静态库,而不是另一个项目.(C++)
- std :: getline在一个项目中汇总了罚款,但不是另一个项目
- 导出visual studio c++项目以在另一个项目中使用,而不显示.cpp和.h源文件
- 有没有办法设置 Eclipse 以使用另一个项目的输出作为库?
- C++/VS 2012-多项目解决方案:一个项目中存在链接器错误,但另一个项目没有
- Boost:阻塞,直到队列有另一个项目