【问题标题】:Why can my C program run in "git bash", but not in "cmd"?为什么我的 C 程序可以在“git bash”中运行,但不能在“cmd”中运行?
【发布时间】:2020-03-24 00:46:25
【问题描述】:

我编写了一个使用 libpq 连接到 PostgreSQL 数据库的演示。

我尝试通过包含将 C 文件连接到 PostgreSQL

#include <libpq-fe.h>

在我将路径添加到系统变量I:\Program Files\PostgreSQL\12\libI:\Program Files\PostgreSQL\12\include 并使用此命令编译后:

gcc -Wall -Wextra -m64 -I "I:\Program Files\PostgreSQL\12\include" -L "I:\Program Files\PostgreSQL\12\lib" testpsql.c -lpq -o testpsql

它首先引发了三个错误,比如

libssl-1_1-x64.dll is missing
libintl-8.dll was missing
libcrypto-1_1-x64.dll was missing

我把这三个文件下载到I:\Program Files\PostgreSQL\12\lib后,重新编译,就报错了

The application was unable to start correctly (0xc0150002)

当我输入testpsql 时。但是,如果我在 git bash 上键入 ./testpsql,它就可以工作。谁能告诉我为什么?

我使用的代码是来自here 的第一个示例。

环境:PostgreSQL 12、Windows 10、MinGW64

【问题讨论】:

    标签: c postgresql gcc mingw git-bash


    【解决方案1】:

    “下载 DLL 文件”听起来很危险。从哪里来?

    我会再次摆脱这些文件。由于您可能没有从代码中引用这些库,因此它必须是 libpq.dll 的依赖项,并且可能在 I:\Program Files\PostgreSQL\12\bin 中找到(如果您使用了 EDB 安装程序)。

    问题可能是git bashcmd.exe 中的PATH 环境变量不同,在后一种情况下,并非所有必需的共享库都可以在PATH 上找到。解决方案是更改 PATH,使其包含可执行文件所需的所有 DLL 文件,开始复制文件。

    PATH 中包含I:\Program Files\PostgreSQL\12\bin 可能就足够了。要解决缺少的依赖关系,请使用dependency walkerthis replacement 之类的工具。

    【讨论】:

    • 您好,非常感谢您提供的信息。我从这里下载了 dll 文件:dll-files.com/libssl-1_1-x64.dll.html。我会努力改变路径
    • 立即删除那些下载的文件。永远不要运行从某处下载的可执行文件。
    • 我删除了它们!!!你是对的,它运行得很好,没有三个 dll。但是我对环境路径很困惑。我的意思是,如果我在.exe所在的字典下执行.exe,为什么它与环境有关?
    • 您的意思是“目录”,而不是“字典”。在 Windows 上,当前目录始终是共享库路径的一部分。不过,最好合理地设置PATH,以便将共享库复制到每个目录。
    猜你喜欢
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    相关资源
    最近更新 更多