2011-09-30 2 views
1

J'ai une bibliothèque statique C construite (la bibliothèque Antlr 3 C). Il est installé correctement et fonctionne (c'est-à-dire, je peux exécuter gcc -o parser lexer.c parser.c -lantlr3c très bien).Y compris bibliothèque C externe avec Xcode

Dans Xcode, cependant, j'obtiens une erreur. J'ai ajouté -lantlr3c dans le paramètre de construction "other linker flags".

ld: library not found for -lantlr3c 
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc-4.2 failed with exit code 1 

Plusieurs autres questions que j'ai trouvé ici (1, 2, 3, 4) ont généralement des réponses ciblant Xcode 3. J'utilise Xcode 4.1, dans un projet de bibliothèque statique iOS. Je construis actuellement les tests de l'unité.


EDIT: Comme demandé par @LaceySnr, la sortie de gcc bavard et l'erreur de Xcode.

La sortie de gcc:

$ gcc -v -o parser.o BFMathParser.c BFMathLexer.c -lantlr3c -arch i386 
Using built-in specs. 
Target: i686-apple-darwin11 
Configured with: /private/var/tmp/llvmgcc42/llvmgcc42-2335.15~25/src/configure --disable-checking --enable-werror --prefix=/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin11 --enable-llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2335.15~25/dst-llvmCore/Developer/usr/local --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 --target=i686-apple-darwin11 --with-gxx-include-dir=/usr/include/c++/4.2.1 
Thread model: posix 
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00) 
/usr/llvm-gcc-4.2/bin/../libexec/gcc/i686-apple-darwin11/4.2.1/cc1 -quiet -v -iprefix /usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin11/4.2.1/ -D__DYNAMIC__ BFMathParser.c -fPIC -quiet -dumpbase BFMathParser.c -mmacosx-version-min=10.7.0 -mtune=core2 -auxbase BFMathParser -version -o /var/folders/5v/9rvx60c17vl7kc3b_r8gz0wc0000gn/T//ccistonB.s 
ignoring nonexistent directory "/usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin11/4.2.1/../../../../i686-apple-darwin11/include" 
ignoring nonexistent directory "/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/../../../../i686-apple-darwin11/include" 
#include "..." search starts here: 
#include <...> search starts here: 
/usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin11/4.2.1/include 
/usr/local/include 
/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/include 
/usr/include 
/System/Library/Frameworks (framework directory) 
/Library/Frameworks (framework directory) 
End of search list. 
GNU C version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00) (i686-apple-darwin11) 
    compiled by GNU C version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00). 
GGC heuristics: --param ggc-min-expand=150 --param ggc-min-heapsize=131072 
Compiler executable checksum: edef36ecca2ce3f93d0f78610b5af911 
/usr/llvm-gcc-4.2/bin/../libexec/gcc/i686-apple-darwin11/4.2.1/as -arch i386 -force_cpusubtype_ALL -o /var/folders/5v/9rvx60c17vl7kc3b_r8gz0wc0000gn/T//ccqP9bOO.o /var/folders/5v/9rvx60c17vl7kc3b_r8gz0wc0000gn/T//ccistonB.s 
/usr/llvm-gcc-4.2/bin/../libexec/gcc/i686-apple-darwin11/4.2.1/cc1 -quiet -v -iprefix /usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin11/4.2.1/ -D__DYNAMIC__ BFMathLexer.c -fPIC -quiet -dumpbase BFMathLexer.c -mmacosx-version-min=10.7.0 -mtune=core2 -auxbase BFMathLexer -version -o /var/folders/5v/9rvx60c17vl7kc3b_r8gz0wc0000gn/T//ccistonB.s 
ignoring nonexistent directory "/usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin11/4.2.1/../../../../i686-apple-darwin11/include" 
ignoring nonexistent directory "/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/../../../../i686-apple-darwin11/include" 
#include "..." search starts here: 
#include <...> search starts here: 
/usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin11/4.2.1/include 
/usr/local/include 
/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/include 
/usr/include 
/System/Library/Frameworks (framework directory) 
/Library/Frameworks (framework directory) 
End of search list. 
GNU C version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00) (i686-apple-darwin11) 
    compiled by GNU C version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00). 
GGC heuristics: --param ggc-min-expand=150 --param ggc-min-heapsize=131072 
Compiler executable checksum: edef36ecca2ce3f93d0f78610b5af911 
/usr/llvm-gcc-4.2/bin/../libexec/gcc/i686-apple-darwin11/4.2.1/as -arch i386 -force_cpusubtype_ALL -o /var/folders/5v/9rvx60c17vl7kc3b_r8gz0wc0000gn/T//ccepo2q0.o /var/folders/5v/9rvx60c17vl7kc3b_r8gz0wc0000gn/T//ccistonB.s 
/usr/llvm-gcc-4.2/bin/../libexec/gcc/i686-apple-darwin11/4.2.1/collect2 -dynamic -arch i386 -macosx_version_min 10.7.0 -weak_reference_mismatches non-weak -o parser.o -lcrt1.10.6.o -L/usr/lib/i686-apple-darwin11/4.2.1 -L/usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin11/4.2.1 -L/usr/llvm-gcc-4.2/bin/../lib/gcc -L/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1 -L/usr/lib/gcc/i686-apple-darwin11/4.2.1 -L/usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin11/4.2.1/../../.. -L/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/../../.. /var/folders/5v/9rvx60c17vl7kc3b_r8gz0wc0000gn/T//ccqP9bOO.o /var/folders/5v/9rvx60c17vl7kc3b_r8gz0wc0000gn/T//ccepo2q0.o -lantlr3c -lSystem -lgcc -lSystem 

La sortie de Xcode:

Libtool /Users/bf/Library/Developer/Xcode/DerivedData/Calculator-dggaoccanosfnrampxhlfrbuuyoi/Build/Products/Debug-iphonesimulator/libcalclib.a normal i386 
    cd /Users/bf/Desktop/calclib 
    setenv MACOSX_DEPLOYMENT_TARGET 10.6 
    setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" 
    /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/libtool -static -arch_only i386 -syslibroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk -L/Users/bf/Library/Developer/Xcode/DerivedData/Calculator-dggaoccanosfnrampxhlfrbuuyoi/Build/Products/Debug-iphonesimulator -filelist /Users/bf/Library/Developer/Xcode/DerivedData/Calculator-dggaoccanosfnrampxhlfrbuuyoi/Build/Intermediates/calclib.build/Debug-iphonesimulator/calclib.build/Objects-normal/i386/calclib.LinkFileList -lantlr3c -ObjC -framework Foundation -o /Users/bf/Library/Developer/Xcode/DerivedData/Calculator-dggaoccanosfnrampxhlfrbuuyoi/Build/Products/Debug-iphonesimulator/libcalclib.a 

Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/libtool failed with exit code 1 

Répondre

0

Cliquez sur votre projet dans le navigateur, sélectionnez la cible appropriée, et dépliez les Cadres liés et bibliothèques section . Cliquez sur le plus, cliquez sur Ajouter autre ... et accédez à votre objet statique. Vous devrez également supprimer le drapeau -lantlr3c.

+0

J'ai sélectionné la cible de test, mais je n'ai pas trouvé la section "Frameworks et bibliothèques liés". J'ai trouvé la section "Link Binary with Libraries" dans l'onglet "Build Phases", mais l'ajout de la bibliothèque libantlr3c.a n'a pas fonctionné. (J'ai retiré le drapeau -lantlr3c, mais en vain.) – CajunLuke

+0

Etes-vous sûr de l'avoir compilé pour la bonne architecture? – zneak

+0

Je suis assez sûr que je l'ai compilé pour i386, ce qui devrait être assez bon pour le moment pendant que je teste dans le simulateur. Comment pourrais-je vérifier l'architecture de la bibliothèque? – CajunLuke

0

Vous pouvez l'utiliser dans les autres indicateurs de l'éditeur de liens, mais vous devez également vous assurer que le chemin figure également dans les chemins de recherche de la bibliothèque.

Assurez-vous également que vous construisez avec la bonne configuration (debug/release/whatever) - vous pouvez spécifier différentes bibliothèques à lier pour chacun, donc si vous l'avez défini pour le débogage mais que vous construisez le libérer De toute évidence, ne sera pas lié.

+0

Comment trouver/modifier les chemins de recherche de la bibliothèque? Je suis à peu près certain que je cible la bonne cible - cible de test, mode de débogage à chaque fois. – CajunLuke

+0

Je n'avais pas remarqué que c'était pour xcode 4 - essayez d'utiliser les chemins d'accès Frame Work Search dans vos paramètres cible/projet. –

+0

Je suis assez sûr qu'il peut trouver la bibliothèque - je ne reçois pas d'erreurs "symbole non trouvé", ce que je reçois si je supprime la bibliothèque ou le drapeau -lantlr3c. – CajunLuke

0

Lorsque vous testez cette lib avec gcc sur votre Mac, vous en utilisez la version x86. L'éditeur de liens iOS ne le trouve pas car vous n'avez probablement pas construit la version de bras de la bibliothèque.

+0

Je ne suis pas sûr de savoir comment construire la bibliothèque pour ARM, et je fais des tests dans le simulateur iOS, qui construit pour i386. – CajunLuke

+0

Je pense que vous pouvez construire la bibliothèque ARM de la même manière que la x86, mais en ajoutant -arch armv6 ou -arch armv7 à la ligne de commande gcc. – Miguel

Questions connexes