我有两个用C++编写的项目。假设项目被命名为第一个和第二个,第一个是基础项目,第二个项目有第一个的插件,所以当我构建和安装第二个时,它只是添加了第一个的功能。
我创建了两个独立的Makefile项目"第一个"one_answers"第二个",我能够分别构建这两个项目。
我的问题是,我无法将"第一个"中生成的二进制文件链接为"第二个"的基本二进制文件。我试着在stackoverflow上搜索类似的问题,但我不知道如何将"第一个"中生成的二进制文件链接到"第二个",如果有任何帮助,我将不胜感激。
如果我需要重新定义我的问题,请告诉我。
如果您正在使用GCC,并阅读链接器选项的参考,您会注意到与外部库链接的选项:
-
-L<directory>
此选项告诉链接器将
<directory>
添加到库搜索路径。换句话说,它告诉链接器在哪里可以找到库文件。 -
-l<name-of-lib>
此选项告诉链接器链接到库。POSIX环境(使用Cygwin或MinGW的Linux、OSX、Windows)中的库的名称类似于
libname-of-lib.a
,但使用-l
选项时,不需要使用lib
前缀或.a
扩展名。还要注意,在选项-l
中,这是小写字母L(不是大写i或数字1)。
总结:要从另一个目录链接到库,您可以这样链接:
$ gcc <other flags> <object files> -o <executable> -L<directory> -l<library>
在您的情况下,应该为-L
选项指定project1
的库所在的目录,为-l
选项传递库的基本名称。
另一方面,如果你不把project1
变成一个库,并且想直接链接到它的对象文件,那也没关系:
$ gcc <flags> <object files of project1> <object files of project2> -o <executable>
对象文件当然可以是完整路径,也可以是相对路径。例如,如果您有以下目录结构:
/`--家`--用户`--我的项目|--项目1`--project2
然后,如果您在project2
目录中,您可以像一样从project1
访问对象文件
../project1/objectfile.o
所有这些当然都可以放在Makefile中。