Как Cygwin g ++ разрешил это? - PullRequest
1 голос
/ 20 марта 2019

Я озадачен тем, как просто 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 и подтвердил, что они находятся в:

  • / usr / include / Poco / (файлы заголовков)
  • / usr / lib / (библиотеки)

Но без указания этих include и пути к библиотеке в g++ как он смог скомпилировать и создать exe-файл? Я проверил вывод g++ -v и не увидел маршрутов к Poco.

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Компилятор имеет пути поиска по умолчанию для включаемых файлов и для библиотек.(На самом деле последнее относится к компоновщику, а не к компилятору, но команда g++ вызывает оба.)

/usr/include и /usr/lib находятся в этих путях поиска по умолчанию.

Выуказал #include <Poco/File.h>, поэтому компилятор обнаружил /usr/include/Poco/File.h.

Вы указали -lPocoFoundation, поэтому компоновщик обнаружил /usr/lib/libPocoFoundation.dll.a, файл, содержащий код, реализующий библиотеку PocoFoundation в Cygwin.

1 голос
/ 20 марта 2019

Я проверил вывод g++ -v и не увидел маршрутов в Poco

Команда g++ -v просто распечатает некоторую информацию о версии о GCC и о том, как она была настроена. Добавление опции -v к вашим реальным командам, используемым для компиляции и / или компоновки, покажет пути поиска для заголовков и библиотек.

Другими словами, вместо g++ -v вы должны попробовать:

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

Это покажет пути поиска, на которые ссылается Кит Томпсон в своем ответе.

...