如何在Windows cmd上添加要使用g ++构建的第三方库?

问题描述 投票:0回答:1

我正在尝试使用SDL构建C ++应用程序。我的计划是静态链接库,因此我不必处理dll。 (我之前的问题:Where do one start on deploying C++ code?)。我正在从这里进行以下操作:How can i statically link standard library to my c++ program?

我可能必须以某种方式告诉编译器在哪里可以找到库,但是我不知道该怎么做。

我尝试过g++ -B <path> -c -Wall main.cpp

但是它仍然抱怨找不到SDL.h(上面的路径指向包含SDL.h的文件夹)。

我从帮助菜单中寻找-B选项,可能使用了错误的选项。

我如何告诉编译器在哪里可以找到头文件,然后在链接器上可以找到...无论需要什么,现在是否需要做与库相关的事情?

((您可能已经猜到了,我对手动构建项目和部署的知识非常有限,因此任何来源也都值得赞赏。)

c++ build g++ sdl-2
1个回答
0
投票

编译C / C ++代码是一个很大的话题,因此,我绝对建议您也阅读这样的教程:https://www.geeksforgeeks.org/compiling-with-g-plus-plus/https://courses.cs.washington.edu/courses/cse373/99au/unix/g++.html

但是无论如何:

这是一个示例项目,它使用库libFoo,并包含该库中的几个头文件:

Myproject:
   - Main.cpp
   - ClassFoo.cpp
   - ClassFoo.hpp

ClassFoo.cpp的一部分:

#include "AClassFooHeader.hpp"

ClassFoo::myFunc() {
   foo.execute(); // execute a random function in the libFoo library
}

现在假设我们要编译该项目,需要执行什么命令?

因此,第一部分是编译项目。基本上,我们会将源文件转换为目标文件。之后,我们将它们链接到一个应用程序中(连同一个库)。

假设我们运行此命令:

g++ -c Main.cpp ClassFoo.cpp

我们将收到一个包含错误,例如:“找不到AClassFooHeader.hpp”。这是为什么?好的,编译器会在一些预定义的位置搜索头文件,但是我们的库不在预定义的位置,因此找不到头文件。我们该如何解决?

g++ -I/path/to/lib/folderHeader -c Main.cpp ClassFoo.cpp

所以现在我们包含了文件的路径,因此编译器知道在哪里可以找到AClassFooHeader.hpp

但是现在我们还需要在应用程序中将对象链接在一起。没有库,可以使用以下方法完成:

g++ -o application.exe Main.o ClassFoo.o

因此,我们将.o文件链接到应用程序(称为application.exe)中

但是现在我们还需要链接我们的库。这可以通过以下方式完成:

g++ -o application.exe Main.o ClassFoo.o -L/path/to/lib/folderLibrary -lFoo

其中-L是存储库的位置,而-l是减去lib的库的名称,因此例如libFoo-> -lFoo

这也可以一步完成:

g++ -o application.exe -I/path/to/lib/folderHeader Main.cpp ClassFoo.cpp -L/path/to/lib/folderLibrary -lFoo
© www.soinside.com 2019 - 2024. All rights reserved.