Cygwin g++ 是如何解决的?

How did Cygwin g++ resolve it?

我很困惑,仅仅 g++ -o testpoco testpoco.cpp -lPocoFoundation 是如何在我的 Cygwin 环境中成功编译的。完整的C++代码如下:

#include <Poco/File.h>

int main (int argc, char *argv[])
{
    Poco::File f("/tmp/test.log");
    if (f.exists()) {
        return 1;
    }
    return 0;
}

我安装了 cygwin Poco 开发头文件和库,并验证它们位于:

但是在g++中没有指定那些包含和库路径,它是如何编译和生成exe的?我检查了 g++ -v 的输出,没有看到任何到 Poco 的路由。

编译器具有包含文件和库的默认搜索路径。 (实际上后者适用于链接器,而不是编译器,但是 g++ 命令会调用两者。)

/usr/include/usr/lib 在这些默认搜索路径中。

您指定了 #include <Poco/File.h>,因此编译器找到了 /usr/include/Poco/File.h

您指定了 -lPocoFoundation,因此链接器找到 /usr/lib/libPocoFoundation.dll.a,该文件包含在 Cygwin 下实现 PocoFoundation 库的代码。

I checked the output of g++ -v and did not see any routes to Poco

命令g++ -v只会打印出一些关于GCC的版本信息,以及它是如何配置的。将 -v 选项添加到用于编译 and/or 链接的真实命令将显示 headers 和库的搜索路径。

换句话说,除了 g++ -v 你应该尝试:

g++ -o testpoco testpoco.cpp -lPocoFoundation -v

这将显示 Keith Thompson 在他的回答中提到的搜索路径。