내 C++ 응용 프로그램에서 추한 C 라이브러리를 사용해야합니다. 다음 설명에서는 UglyLib이라고 부릅니다. 정적으로 링크 된 라이브러리로 UglyLib을 성공적으로 컴파일했습니다. UglyLib ugly.h 파일에 은 통근 변수를 사용정적 라이브러리 내에서 extern variable linking failure
파일 ugly.h (사용과 같은)
extern SomeStruct_type somestruct;
변수가 정의되는 다른 파일이다. 나는 그것을 anotherugly.c라고 부를 것이다.
파일 anotherugly.c :
SomeStruct_type somestruct;
내 C++ 응용 프로그램 고유의 템플릿 라이브러리 (TemplateLib) 및 응용 프로그램 자체 메인 윈도우의 GUI 코드에 의해 정적으로 링크 된 응용 프로그램 라이브러리로 구성되어 기반으로
메인 윈도우 코드. 이 정적 링크 된 라이브러리 인 ApplicationLib이라고 부릅니다.
TemplateLib에는 somestruct, 즉 UglyLib에 의해 노출 된 extern 변수를 사용하여 foo라는 함수를 내 보냅니다 templatelibfile.h가 포함되어 있습니다.
파일 templatelibfile.h :
#include<ugly.h>
...
void foo()
{
...
do something with somestruct
...
}
푸 기능은 정적으로 링크 ApplicationLib에 포함 appllibfile.h에 의해 사용된다.
파일 appllibfile.h은 : VS2008에서
#include<appllibfile.h>
...
int main()
{
...
applfoo();
...
return 0;
}
내가 컴파일하려고 :
#include<templatelibfile.h>
...
void applfoo()
{
...
foo();
...
}
는
메인 윈도우 응용 프로그램 appllibfile.h
파일 MAIN.CPP을 포함 메인 윈도우 응용 프로그램, 마이크로 소프트 링커가 내게이 오류를 준다
오류 LNK2001 : 나는 통근 변수의 templatefile.ha 새로운 정의에 추가하는 경우 확인되지 않은 외부 기호는 "구조체 SomeStruct_type somestruct"(? somestruct @@ 3USomeStruct_type @@ A)
는 컴파일러에 정지 불평.
파일 templatelibfile.h :
#include<ugly.h>
SomeStruct_type somestruct
...
void foo()
{
...
do something with somestruct;
...
}
하지만 내가 그것을 할 수있는 올바른 것 (I가 위험을 감수하지 않으려 인 경우 내가 모르기 때문에 그것을 피하고자하는 것 somestruct 변수의 다른 인스턴스를 다시 정의하는 UglyLib의 의미 체계 변경). somestruct extern 변수를 재정의하지 않고 링크 문제를 피하기 위해 몇 가지 제안 사항이 있습니까? 감사합니다.
고마워요. 완벽하게 작동합니다. –
@GuidoRanzuglia : 왼쪽 눈금을 클릭하여 답을 수락해야합니다. –