Есть две библиотеки «С» lib1, lib2. lib2 использует функции lib1. Есть программа на С++. В ней используются функции lib2.
Структура директорий:
$ tree
.
|-- lib1
| |-- lib1.c
| `-- lib1.h
|-- lib1.a
|-- lib1.o
|-- lib2
| |-- lib2.c
| `-- lib2.h
|-- lib2.a
|-- lib2.o
`-- prog
`-- main.cpp
lib1.h
void lib1_print(const char *szWhat);
lib1.c
#include <stdio.h>
void lib1_print(const char *szWhat)
{
printf(szWhat);
}
lib2.h
void lib2_print(const char *szWhat);
lib2.c
#include "../lib1/lib1.h"
void lib2_print(const char *szWhat)
{
lib1_print(szWhat);
}
main.cpp
extern "C"
{
#include "../lib2/lib2.h"
}
int main()
{
lib2_print("hello");
}
Компилирую:
$ gcc -c lib1/lib1.c -o lib1.o && ar -r lib1.a lib1.o
lib1/lib1.c: In function ‘lib1_print’:
lib1/lib1.c:5: warning: format not a string literal and no format arguments
$ gcc -c lib2/lib2.c -o lib2.o && ar -r lib2.a lib2.o
$ g++ -o out prog/main.cpp -l1 -l2 -L./
.//lib2.a(lib2.o): In function `lib2_print':
lib2.c:(.text+0xd): undefined reference to `lib1_print'
collect2: ld returned 1 exit status
Кто знает, в чем проблема?