2014-09-01 2 views
1

Visual Studio 2013로 .dll을 만들려고합니다.이 프로젝트에는 libpq 기능이 포함되어 있습니다.Visual Studio 2013에서 libpq 사용, DLL로 컴파일

내가 인터넷에서 발견 한 다른 소스 오버 플로우 플로우마다, 나는 (나는 알고있는 한) postgres 라이브러리를 올바르게 추가하고 프로젝트에 디렉토리를 포함시켰다. 그러나 프로젝트를 빌드 할 때 여러 "확인되지 않은 외부 기호"오류가 반환됩니다.

내 경로는 C:\Program Files\PostresSQL\9.3\...이므로 추가 라이브러리/디렉토리 필드에 따옴표로 묶습니다. 프로젝트에 libpq-fe.h 헤더 파일을 포함 시켰습니다 ... 내가 잘못하고있는 것이 확실하지 않습니다.

또 다른 참고 사항으로 g ++을 -I, -L 및 -lpq 플래그와 함께 사용하여 명령 줄에서 테스트 프로그램을 컴파일 할 수 있지만 명령 줄에서 .dll을 컴파일하는 방법을 모르겠습니다. 더하기 그것은 내가 다루고 싶지 않은 복잡성을 더 해줍니다.)

내가지고있어 특정 오류가 있습니다 :

1>sql_arma.obj : error LNK2001: unresolved external symbol _PQconnectdb 
1>sql_arma.obj : error LNK2001: unresolved external symbol _PQstatus 
1>sql_arma.obj : error LNK2001: unresolved external symbol _PQerrorMessage 
1>sql_arma.obj : error LNK2001: unresolved external symbol _PQfinish 
1>C:\Users\tills13\documents\visual studio 2013\Projects\sql_arma\Release\sql_arma.dll : fatal error LNK1120: 4 unresolved externals 

아래 제안 나는,이, 내 프로젝트의 소스 파일에 #pragma comment(lib, "libpq.lib") 포함, 난 아직도 이러한 오류를받을 수 있습니다.

+0

컴파일, 나는 당신이 그 상징을 수출하기로 생각합니다. 어쩌면이 당신에게 도움이 될 수 더 : [1] http://msdn.microsoft.com/en-us/library/z4zxe9k8.aspx [2] http://stackoverflow.com/questions/225432/export -all-symbols-dll을 만들 때 [3] http://msdn.microsoft.com/en-us/library/a90k134d.aspx – hbobenicio

+0

내 코드에 필요한 기호를 내보내는 중입니다. . 내 문제는 libpq에서 정의되지 않은 기호입니다. –

+0

연결 구성은 어떻게됩니까? 올바른 .lib 파일과 연결하고 있습니까? 여기에있는 바보 같은 질문 : 해결되지 않은 외부 기호는 libpq의 기호입니다. – hbobenicio

답변

1

: -

  • libpq.lib 추가 대응> 라이브러리,

    • VC++ 디렉토리 -에 <pgsql install path>\include\lib를 추가>포함 링커 -> 입력 -> 추가 종속성

    타사 라이브러리를 참조하는 표준 방법입니다. VCS에서 프로젝트를 패치 할 때 "기본 디렉토리"에 환경 변수를 사용하는 것이 좋습니다.

    • , 나는 또한 Debugging-에 PATH=%PATH%;<pgsql install path>\bin 지정 (와 디버깅하지 않고 모두) VS에서 응용 프로그램을 실행할 수 있도록>이 디렉토리 이후 환경 내 시스템에 PATH에 있지 않습니다.
  • +0

    고맙습니다. Additional Dependencies에'libpq.lib'을 추가하는 것은 그것을했다. 현상금을 당신에게 줄 수 있었으면 좋겠어요. –

    +0

    @ivan_pozdeev : VC++ 디렉토리에 include와 lib 디렉토리의 pgsql 경로를 추가했습니다. 또한 libpq.lib를 추가 종속성으로 추가했습니다. 아직 해결되지 않은 심볼로 링크가 연결되어 있습니다. 코드가 성공적으로 컴파일되고 있지만 링크 오류가 발생했습니다. – void

    +0

    @void 더 많은 정보를 보지 않고는 말할 수 없습니다. 이 질문이 관련 설정 및 출력을 지정하고 제공함에 따라 언급 한 다른 질문을하십시오. –

    0

    프로젝트에 postgres lib 디렉토리를 추가하는 것만으로는 충분하지 않으므로 libpq.lib에 대한 참조를 으로 추가해야합니다.

    #pragma comment(lib, "libpq.lib") 
    

    언급 한 바와 같이 라이브러리가 프로그램 비트 수 (32 또는 64 비트)과 일치해야합니다 마르코 A.에 의해 : : 그냥 소스 .cpp 파일 중 하나에이 줄을 추가하면 32 비트 DLL을 빌드하는 경우 (라 Win32) 32 비트 라이브러리를 사용해야합니다. if 64-bit (x64) - 64 비트 라이브러리. 나는 성공적으로 프로젝트 속성 설정하여 sample program를 컴파일 한

    +0

    불행히도 여전히 작동하지 않습니다. 더 많은 정보를 가지고 내 게시물을 편집했습니다. –

    +0

    현재 32 비트 포스트그래를 다시 설치하여 문제를 해결할 수 있는지 확인하고 있습니다. –

    +0

    아니요. 32 비트 및 64 비트 포스트그레스는 동일한 오류를 발생시킵니다. –

    0

    나는 또한 동일한 문제에 직면 해있다. 그런 다음 응용 프로그램을 32 비트로 작성한다는 것을 알게되었습니다.나는 64에 내 응용 프로그램의 대상을 변경하고 다른 DLL에서 심볼에 의존하는 DLL을 구축하기 위해 성공적으로

    enter image description here

    관련 문제