编译
gcc echo.c -o app -lfcgi
-o app:指定编译后的输出文件名为 app。
-lfcgi:告诉编译器链接 FastCGI 库。
检查
ldd app
ldd 是一个在 Unix 和类 Unix 系统中用来打印一个已编译的程序所依赖的共享库列表的命令。当你运行 ldd app 命令时,它会列出所有由 app 程序在运行时需要的共享库。
得到:
linux-vdso.so.1 => (0x00007fffffbfb000)
libfcgi.so.0 => not found
libc.so.6 => /lib64/libc.so.6 (0x00007f8536f4f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f853731d000)
not found说明编译后的程序 app 在运行时依赖于 libfcgi.so.0 这个共享库,但是系统无法找到这个库。
搜索缺少的库并添加
后缀的.0指的是版本号,实际文件名称中不含有。所以搜索的时候无需添加。
搜索库:
find / -name "libfcgi.so"
得到库的路径
添加路径
LD_LIBRARY_PATH
LD_LIBRARY_PATH 是一个环境变量,用于在运行时为动态链接器(ld.so)提供额外的搜索路径,以便找到程序所需的共享库。当程序被执行时,动态链接器会首先在 LD_LIBRARY_PATH 指定的目录中查找所需的共享库,然后再按照 /etc/ld.so.conf 文件及其包含的文件中定义的顺序搜索。
临时添加
1.在命令行中添加:
打开终端,然后使用 export 命令添加路径。例如,如果您想添加 /usr/local/lib 到 LD_LIBRARY_PATH,可以使用以下命令:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
这条命令只会影响当前会话,一旦您关闭终端或注销,修改就会失效。
2.在脚本中添加:
可以在代码的开头添加上述 export 命令,这样代码执行时就会使用这个环境变量。
永久添加
1.对当前用户:
将上述 export 命令添加到当前用户的 shell 配置文件中,例如 /home/username/.bashrc、/home/username/.profile 或 /home/username/.bash_profile(取决于使用的是哪个 shell 和具体配置)。使用文本编辑器打开配置文件,例如:
echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
然后,为了使更改立即生效,可以运行:
source ~/.bashrc
2.对所有用户:
如果所有用户都使用这个环境变量,可以将其添加到 /etc/profile 或 /etc/environment 文件中。
需要 root 权限:
sudo echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> /etc/profile
修改ld.so.conf文件
位于/etc/目录下的ld.so.conf是 Linux 系统中用于配置动态链接器(ld.so)搜索共享库的配置文件。
vim /etc/ld.so.conf
//或者
sudo vim /etc/ld.so.conf
添加上刚刚查找到的路径,之后再运行以下命令来更新缓存(需要root权限):
sudo ldconfig
验证
进行完之后再验证
ldd app
能查找到路径了。