Я пытаюсь связать некоторые части статической библиотеки в программу, написанную на C ++ с использованием g ++ под Linux.
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
}
Я статически создаю libmy_lib.a с флагом препроцессора -DUSE_EXTERN_LIB, чтобы включить в него все.
но я хочу создать две программы: одну, которая использует эту библиотеку с * 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 не объявлена.
С динамической библиотекой проблем нет, потому что символы загружаются во время выполнения, но я хочу статическую библиотеку.
Есть ли способ связать только нужные модули статической библиотеки?
EDIT
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;
}
Спасибо.