我试图重构一个由两个相对独立的部分组成的应用程序,一部分用C语言编写(让我们称之为A部分),另一部分用C ++编写( B)部分。 A部分包含应用程序的主要逻辑,B部分包含实用程序功能。
最初,所有内容都是用g ++编译的,并且在A部分中有一些C ++指令用于使用B部分类和方法。整个过程与B部分所需的各种C ++库相关联。
我想明确区分这两部分。我创建了一个新模块(interface.h interface.cpp,它定义了一些带有C接口的函数,它调用了我需要的C ++东西)。现在,partA仅使用interface.h中定义的函数来访问B部分提供的服务。
现在我想从B部分生成一个静态库。我已尝试过这些方法:
首先,生成库:
ar rcs libpartB.a interface.o partB1.o partB2.o ...
(PartBX.o
是我从B部分生成的(c ++)目标文件,interface.o完全定义了A部分所需的功能。
然后,我编译我的主应用程序:
gcc -o main partA.o -lpartB
不幸的是,它不起作用!当我创建静态库时,显然我仍然会遗漏一些代码:例如,我的代码中需要的C ++库和其他库。我想在libpartB.a中包装我需要的所有内容,这样当我将partA.o链接到libpartB.a时,我不必依赖外部资源。
所以我的问题是: - 如何将所需的外部库添加到libpartB.a,而不仅仅是我的代码真正需要的? - 我的方法有意义吗?
更新: 我设法将我的应用程序与诸如
之类的命令链接起来 g++ -o main partA.o -lpartB -lxml++ -lglib2 -l... -l...
这种方法让我感到困扰的是,只要工作在B部分的人决定在他们的代码中使用新库,我就需要更改部分A的makefile。尽可能地,我想将它分成两个独立的项目,两个不同的Makefile,以及一个定义接口的简单契约(" interface.h")。我想那会......