我很困惑,仅仅是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++
中指定那些include和library路径,它是如何编译和生成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库的代码。
我检查了
g++ -v
的输出,没有看到任何到Poco的路线
命令g++ -v
将打印出一些关于GCC的版本信息,以及它是如何配置的。将-v
选项添加到用于编译和/或链接的实际命令中将显示标题和库的搜索路径。
换句话说,你应该尝试:而不仅仅是g++ -v
:
g++ -o testpoco testpoco.cpp -lPocoFoundation -v
这将显示Keith Thompson在他的回答中提到的搜索路径。