编译和链接行指的是什么?

编译和链接行指的是什么?

在安装 cudnn 库时,我在INSTALL.txt文件中遇到了这个:

通过将 -I[installpath] 添加到编译行并将 -L[installpath] -lcudnn 添加到链接行,将 [installpath] 添加到构建和链接过程中。

编译和链接行是什么意思?我在myFile.c使用 cudnn 进行编译时是否这样做:

gcc myFile.c -L /path/to/library -l /name/of/library

或者是其他东西?

PS:他们还提到这样做:

cd <installpath>
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH

但是我是否需要将其写入我的.bashrc文件,以便每次机器运行时都会设置环境变量?

答案1

您的gcc命令结合了编译和链接阶段,因此您需要添加给定的所有选项:

gcc -Iincludepath myFile.c -Llibpath -lcudnn

更换includepathlibpath视情况而定。

是的,您可能需要编辑您的.bashrc设置LD_LIBRARY_PATH

export LD_LIBRARY_PATH=libpath:$LD_LIBRARY_PATH

libpath酌情更换。

includepath需要指向头文件(.h文件)、libpath库(.so)。

答案2

编译和链接是创建可执行文件的两个主要步骤。两者都可以通过命令完成gcc。还有预处理步骤(编译前)和汇编(编译后);这些几乎总是与编译同时完成,因此“预处理然后编译然后汇编”的组合被视为一个简单的步骤,简称为“编译”。

特定命令行执行的步骤gcc可以确定如下:

写下“预处理、编译、汇编、链接”的顺序。

如果输入文件名为*.i,则删除预处理步骤(.i文件已被预处理)。

如果输入文件名为*.s,则删除预处理和编译步骤(.s文件已编译)。

如果输入文件名为*.o,则删除预处理、编译和汇编步骤(.o文件已汇编)。

如果有-x选项,请使用它来代替前面步骤中的输入文件的名称。 (这种情况很少见)

如果-c使用该选项,请删除链接步骤。

如果-S使用该选项,请删除组装和链接步骤。

如果-E使用该选项,则删除编译、汇编和链接步骤。

总之,输入文件的类型决定了预处理-编译-组装-链接序列中的开始位置,//-c选项决定了停止位置(它们分别请求 、 和 类型的输出文件-尽管实际上输出到 stdout默认情况下)。-S-E*.o*.s*.i-E

您的命令行没有任何输出类型选项,并且其输入文件名为*.c,因此它是一个编译行一条链接线。这是编译小程序的正常方式。对于较大的程序,您通常不想一次编译所有内容。最好保存中间*.o文件以供重复使用,并且仅在源文件更改时重新编译它们。

“根据需要重新编译”开发周期涉及gcc -c创建*.o文件的命令(通常一次一个)以及gcc *.o -o theprogram执行链接的命令。这些命令通常在 Makefile 中找到,称为“编译行”和“链接行”。

相关内容