Bonjour,

Je cherche à utiliser la bibliothèque alglib (http://www.alglib.net/) pour un projet en c++.
J'ai suivi leur doc (rudimentaire) pour l'installation, qui s'est bien passée. J'ai un ensemble de .h et un ligalglib.a qui sont réunis dans un seul et même répertoire.

Bien !

Maintenant je passe à la pratique et je construis mon premier programme, main.cpp, en m'inspirant des fichiers de démo :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
#include <stdlib.h>
#include <stdio.h>
#include "ext/alglib/out/ap.h"
 
using namespace std;
 
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
int main( int argc, char *argv[] ) {
 
	ap::real_1d_array x;
 
	return 0;
}
Pour le compiler j'utilise le makefile suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
#!/bin/bash
# MAKEFILE
 
# == MACROS ==================================================
 
# Paths
S = src
I = inc
O = obj
 
# Definitions
OUTPUT = exec
OBJ_LIST = $(O)/main.o
 
# Misc
CC = g++
CFLAGS = -Wall -c -g -lm
LFLAGS = -Wall -g
 
# ============================================================
 
# -- DUMMY TARGETS ----------------
 
# Rebuild all target
all: $(OUTPUT)
 
# Clean
clean:
	\rm $(O)/*.o $(OUTPUT)
 
# -- TARGETS -----------------------
 
# Output
$(OUTPUT) : $(OBJ_LIST)
	$(CC) $(LFLAGS) $(OBJ_LIST) -o $(OUTPUT)
 
$(O)/main.o : $(S)/main.cpp
	$(CC) $(CFLAGS) $(S)/main.cpp -o $(O)/main.o -Lext/alglib/out/ -lalglib
Et voilà le résultat du make :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
g++ -Wall -c -g -lm src/main.cpp -o obj/main.o -Lext/alglib/out/ -lalglib
g++ -Wall -g obj/main.o -o exec
obj/main.o: In function `~template_1d_array': ext/alglib/out/ap.h:239: undefined reference to `ap::afree(void*)'
collect2: ld returned 1 exit status
Pourtant ap::free est bien définie dans ap.h.
Y a-t-il un utilisateur d'alglib qui pourrait éclairer ma lanterne ? Pourquoi la version C++ d'alglib fait-elle appel à ces commandes de C ?

Je travaille sous Ubuntu 9.10, et je compile avec g++.