我有两个用C ++编写的项目。假设项目是第一个和第二个,第一个是基础项目,第二个项目有第一个插件,所以当我构建和安装第二个项目时,它只是增加了第一个项目的功能。
我创建了两个单独的Makefile项目'first'和'second',我可以分别构建它们。
我的问题是我无法将'first'中生成的二进制文件链接为'second'的基本二进制文件。我尝试在stackoverflow上搜索类似的问题,但我不知道如何将“第一个”中生成的二进制文件链接到“第二个”,任何帮助都将不胜感激。
如果我需要重新构思我的问题,请告诉我。
答案 0 :(得分:1)
如果您正在使用GCC,并阅读reference for linker options,您会注意到与外部库链接的选项:
-L<directory>
此选项告诉链接器将<directory>
添加到库搜索路径。换句话说,它告诉链接器在哪里找到库文件。
-l<name-of-lib>
此选项告诉链接器链接库。 POSIX环境中的库(Linux,OSX,使用Cygwin或MinGW的Windows)命名为libname-of-lib.a
,但使用-l
选项时,您不需要使用lib
前缀或{ {1}}扩展名。另请注意,在选项.a
中,这是小写字母L(不是大写字母i或数字1)。
总结:要链接到您链接的另一个目录中的库,如下所示:
-l
在您的情况下,您应该为$ gcc <other flags> <object files> -o <executable> -L<directory> -l<library>
选项指定-L
的库所在的目录,并且对于project1
选项,您可以传递库的基本名称。
另一方面,如果您没有将-l
转换为库,并希望直接链接其目标文件,那也没关系:
project1
目标文件当然可以是完整路径或相对路径。例如,如果您具有以下目录结构:
/ `-- home `-- user `-- myproject |-- project1 `-- project2
然后,如果您在$ gcc <flags> <object files of project1> <object files of project2> -o <executable>
目录中,则可以从project2
访问目标文件,如
project1
所有这些当然可以放在Makefile中。