Skip to content

Poco

Modern, powerful open source C++ class libraries for building network- and internet-based applications that run on desktop, server, mobile and embedded systems.

How to install

우선, 설치방법은 README파일을 읽어보면 된다.

불필요한 라이브러리는 아래와 같이 생략 가능하다.

$ ./configure --omit=NetSSL_OpenSSL,Crypto,Data/ODBC,Data/MySQL

또한 --help옵션을 사용하여 확인할 수 있지만, MinGW용 설정은 아래와 같이 적용할 수 있다.

$ ./configure --config=MinGW

라이브러리 설치는 아래와 같이 진행하면 된다.

$ ./configure --config=MinGW
$ make install

Troubleshooting

Not found ssl & crypto library (from MinGW)

./configure --omit=NetSSL_OpenSSL,Crypto옵션을 사용해도 컴파일 중간에 -lssl, -lcrypto 라이브러리를 찾을 수 없다고 출력된다. 이 경우 ./build/config/MinGW파일의 마지막에 있는 SYSLIBS의 값을 수정하면 된다.

#
# System Specific Libraries
#
SYSLIBS  = -L/usr/local/lib -L/usr/lib -liphlpapi -lws2_32

Not found test (from MinGW)

make도중 testrunner.exe.exe파일을 찾을 수 없다는 에러메시지가 출력된다. .exe확장자가 한 번 더 붙어서 생긴 문제로, ./build/rules/exec파일에서 아래와 같이, EXEC_로 시작하는 변수의 $(BINEXT)값을 제거하면 된다. 결과값은 아래와 같다.

#
# Target names
#
EXEC_RELEASE_STATIC = $(BINPATH)/static/$(target)$(OSARCH_POSTFIX)
EXEC_DEBUG_STATIC   = $(BINPATH)/static/$(target)d$(OSARCH_POSTFIX)
EXEC_RELEASE_SHARED = $(BINPATH)/$(target)$(OSARCH_POSTFIX)
EXEC_DEBUG_SHARED   = $(BINPATH)/$(target)d$(OSARCH_POSTFIX)

WinMain error (from MinGW)

make도중 SampleApp 프로젝트를 빌드하게 되는데, WinMain()함수가 없다는 에러가 발생된다. 이 경우 ./Util/samples/SampleApp/src/SampleApp.cpp파일을 확인하면 문제점을 발견할 수 있다. 하단의 POCO_APP_MAIN(SampleApp) 매크로 문제이며, 해당 매크로는 ./Util/include/Poco/Util/Application.h파일에서 확인할 수 있다. 간단한 해결 방법은 아래와 같이 SampleApp.cpp파일에 WinMain()을 추가하면 된다.

// ...
// POCO_APP_MAIN(SampleApp)

int main(int argc, char** argv)
{
    Poco::AutoPtr<SampleApp> pApp = new SampleApp;
    try
    {
        pApp->init(argc, argv);
    }
    catch (Poco::Exception& exc)
    {
        pApp->logger().log(exc);
        return Poco::Util::Application::EXIT_CONFIG;
    }
    return pApp->run();
}

// For Windows Project Entry point.
#if defined(WIN32) || defined(_WIN32)
#include <windows.h>
int APIENTRY
WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdLine, int cmdShow)
{
    return main(__argc, __argv);
}
#endif

자세한 내용은 Windows Api#Undefined reference to WinMain를 참조.

Favorite site