Linux에서 g ++를 사용하여 C++로 작성된 프로그램에 정적 라이브러리의 일부를 연결하려고합니다.C++ 정적 라이브러리의 원하는 부분 만 연결
my_lib.h
#ifdef USE_EXTERN_LIB
# include <extern_lib.h>
void do_something (struct extern_lib);
#endif
void do_other (int);
my_lib.c
#include "my_lib.h"
#ifdef USE_EXTERN_LIB
void do_something (struct extern_lib l)
{
// do something
}
#endif
void do_other (int a)
{
// do something
}
내가 정적 그것으로 모두를 포함하는 -DUSE_EXTERN_LIB 프리 프로세서 플래그 libmy_lib.a 만드는거야.
는하지만 내가하고 싶은 것은 두 개의 프로그램을 만드는 것입니다 : * extern_lib *로이 라이브러리를 사용하여 하나 하나 * extern_lib의 *없이 사용, 예 :
이g++ -L/path/to/lib -lmy_lib -o prog_wihtout_lib prog_without_lib.cc
g++ -DUSE_EXTERN_LIB -L/path/to/lib -lmy_lib -o prog_with_lib prog_with_lib.cc
두 번째 프로그램은 컴파일하지만 첫 번째는 extern_lib이 선언되지 않았다는 것입니다.
동적 라이브러리를 사용하면 심볼이 런타임에로드되기 때문에 아무런 문제가 없지만 정적 라이브러리가 필요합니다. 정적 라이브러리의 모듈 만 연결할 수 있습니까?
편집
prog_without_lib.cc
#include "my_lib.h"
int main()
{
do_other (42);
return 0;
}
prog_with_lib.cc
#include "my_lib.h"
int main()
{
do_other (42);
struct extern_lib l;
do_something (l);
return 0;
}
감사합니다.
g++ -DUSE_EXTERN_LIB -I/path/to/external_lib/headers -o prog_wih_lib prog_with_lib.cc -L/path/to/external_lib/libfile -lexternal_lib -lmy_lib
이 또한 내가 명령 줄의 끝에있는 라이브러리를 넣어 있습니다 :
"두 번째"컴파일의 정확한 오류를 알려 주실 수 있습니까? 나는 USE_EXTERN_LIB가 정의 된 두 번째 수단을 가정 할 것이다. – David
my_lib.c에서 "#include"my_lib.h "? – hmjd
죄송합니다. 처음 컴파일 한 프로그램이 아닙니다 – marmottus