2012-06-16 6 views
0

라이브러리 (ws2_32)와 헤더 파일 (ws2tcpip.h)을 가지고 있지만 어떤 이유로 라이브러리에 헤더에없는 함수가 있습니다. 메서드 서명을 결정할 수있는 방법이있어서 머리글에 직접 포함 할 수 있습니까?정적 라이브러리에서 헤더를 만들 수 있습니까?

[email protected] ~$ strings /usr/lib/w32api/libws2_32.a | grep -i 'inet_*ntop' 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
inet_ntop      <<< I need this one 
[email protected] 
[email protected] 
InetNtopW      <<< or this one 
[email protected] 
[email protected] 
[email protected] ~$ grep -i -B 4 -A 2 -R "ntop" /usr/include/w32api/ws2tcpip.h 
[email protected] ~$     

링커가이를 확인해야하므로 가능해야합니까?

은 참조 : InetNtop and ws2tcpip.h under GCC/Cygwin

+0

C 함수의 경우 링커는 일반적으로 함수 이름이 동일한 유형인지 또는 호출 규칙인지를 검사하는 것만 검사합니다. 일부 시스템에서는 링커가 호출하는 함수가 함수인지 여부를 확인하지도 않으며, 데이터 덩어리 일 수도 있습니다. –

답변

0

아니, 없다. 라이브러리를 분해하지 않고 많은 추측을하지 않아도됩니다. 일반적으로 희망이 없다고 생각하십시오.

그러나 InetNtopWinet_ntop과 같은 기능이 문서화되어 있으므로 (MSDN) 기능 서명이 무엇인지 알 수 있습니다. 비스타 지원을위한 전 처리기 매크로를 정의하지 않는 한

#if (NTDDI_VERSION >= NTDDI_VISTA) 

그래서 당신이 프로토 타입을받지 않습니다 : 기능은 비스타를 필요로 표시되며, 실제로 당신이 그들이 가드에 둘러싸여 WS2tcpip.h에서 볼 수 있습니다.

// Require Vista 
#define WINVER 0x0600 
#define _WIN32_WINNT 0x0600 
#include <WS2tcpip.h> 

또는 WSAAddressToString을 사용할 수 있습니다. 비슷한 기능이지만 정확히 호환되지는 않습니다. WSAAddressToString

는 Windows 2000에서 사용할 수 각주 : 승 버전이 wchar_t 소요되며 inet_ntopchar 소요를 제외하고InetNtopWinet_ntop 기능, 기본적으로 같은 일이다. 많은 Windows 기능이 이런 방식으로 복제됩니다.

+0

필요한 #define이 있지만 헤더에 정의가 없음을 확인할 수 있습니다 (grep 별). 나는 WSA * 함수를 알고 있지만이 경우에는 사용할 수 없다. 링크가 InetNtop의 MSDN을 가리 키지 만 라이브러리 파일 (문자열 당)로 표시되지 않는 것을 확인한 경우 – Huckle

+0

@Huckle : InetNtop은 함수가 아니기 때문에 라이브러리에 표시되지 않습니다. 전 처리기입니다. UNICODE 매크로의 값에 따라'InetNtopW' 또는'inet_ntop'에 정의 된 매크로. 'WSA'기능을 사용할 수없는 이유가 있습니까? –

+0

WSA 함수는 사용하기 전에 모두 WSAStartup을 호출해야하지만, 내 프로그램의 주된 목적은 소켓에서 전혀 작동하지 않기 때문에 일회성 메모리가있을 때 시간을 낭비하고 싶지는 않습니다. 오버 헤드를 추가하지 않고도 동일한 작업을 수행 할 수 있습니다. Vista보다 이전 버전에서는이 기능을 사용할 필요가 없습니다 (어쨌든 80 %의 * nix에서 사용됨). Ws2tcpip.h 복사본을 pastebin에 게시하여 비교할 수 있습니까? – Huckle

관련 문제