在安装 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
更换includepath
并libpath
视情况而定。
是的,您可能需要编辑您的.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 中找到,称为“编译行”和“链接行”。