2016-08-18 1 views
0

Je souhaite que la bibliothèque ICU fonctionne avec mon programme C, afin que je puisse mettre en minuscule les chaînes UTF-8. Voici un exemple minimal qui reproduit l'erreur de compilation:Impossible de compiler avec la bibliothèque ICU - référence non définie à 'u_strlen_3_6'

main.c

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unicode/ustring.h> 

int main(int argc, char **argv) 
{ 
    UChar test[100] = { 0x41, 0x42, 0x43, 0x20, 0xc6, 0xd8, 0xc5, 0x20, 0xc9, 0x20, 0xc8, 0x20, 0xd1, 0x20, 0xca, 0x20, 0xd6 }; 
    for (int i = 0; i < u_strlen(test); i++){ 
    printf("%d\n", i); 
    } 
} 

Makefile

CC = gcc 
CFLAGS = -g -O3 -std=c99 
GNUCFLAGS = -g -O3 -std=gnu99 -lm 

main: obj/main.o 
    $(CC) $(CFLAGS) -o bin/main obj/main.o 

obj/main.o: src/main.c 
    $(CC) $(CFLAGS) -c src/main.c -o obj/main.o 

sortie du compilateur

gcc -g -O3 -std=c99 -o bin/main obj/main.o 
obj/main.o: In function `main': 
~/src/main.c:9: undefined reference to `u_strlen_3_6' 
collect2: error: ld returned 1 exit status 
Makefile:6: recipe for target 'main' failed 
make: *** [main] Error 1 

J'ai essayé d'inclure TOUS les fichiers d'en-tête listés au http://icu-project.org/apiref/icu4c/ sans aucune chance. Également essayé d'ajouter -licudata -licui18n -licuio -liculx -licutest -licutu -licuuc à Makefile - même erreur.

Je suis sur Debian GNU/Linux 8.5 (jessie) et les packages suivants sont installés:

  • libicu52
  • libicu52-dbg
  • libicu-dev
  • ICU devtools

Des suggestions?

Répondre

0

Je pense que vous avez besoin de #include <unicode/utypes>. Mais vous devriez être capable de comprendre quel fichier d'inclusion Unicode est nécessaire en cherchant dans les fichiers d'en-tête pour trouver celui qui a la définition de u_strlen_3_6.

Vous devrez peut-être ajouter un -I à votre paramètre CFLAGS dans le fichier makefile.

+0

Les fichiers Include résolvent les erreurs de compilation. L'OP a eu une erreur de liaison. – aschepler