2010-02-24 4 views
11

J'essaye de construire un projet open-source très complexe avec VC++. Le projet consiste en des dizaines de bibliothèques et un exécutable en fonction de ces bibliothèques. Pour certaines raisons, l'éditeur de liens VC++ ne veut pas voir environ 40 fonctions implémentées dans une de ces bibliothèques et signale une "référence externe non résolue" sur chacune d'elles, donc je ne peux pas lier. Je ne veux pas perdre de temps à résoudre le problème - ces fonctions ne sont probablement jamais appelées.Puis-je demander à VC++ linker d'ignorer les externes non résolus?

Je voudrais simplement demander à l'éditeur de liens de lier ce qu'il voit et d'insérer une gestion d'erreur raisonnable (comme signaler une erreur et terminer le programme) au lieu de fonctions manquantes. Comment puis je faire ça?

Répondre

13

Vous pouvez utiliser l'option de l'éditeur de liens /FORCE:UNRESOLVED.

La documentation qui contient l'avertissement plutôt sous-estimés:

Un fichier créé avec cette option peut pas fonctionner comme prévu.

En pratique, il n'y aura pas de traitement des erreurs - juste un plantage.

6

Si les fonctions ne sont jamais appelées, créez des bibliothèques (fichiers .lib) pour les bibliothèques. Ensuite, l'éditeur de liens extrait uniquement des bibliothèques ce dont il a besoin. Le travail de l'éditeur de liens est de résoudre toutes les références, donc je ne pense pas que vous allez l'obtenir pour insérer le code de gestion des erreurs.

P.S. La première chose que je vérifie est de voir si les fonctions C ont été compilées en C++, menant aux symboles manquants.

+0

+1 pour le PS. Les fichiers .c se voient différer des fichiers .cpp w/VisualStudio. Selon vos paramètres, ils peuvent également utiliser une convention d'appel différente. –

+0

Eh bien, on les appelle parfois, mais quand j'utilise le programme, ces chemins ne sont jamais exercés. Donc, l'éditeur de liens a raison - il a besoin de la fonction. Je veux quand même produire l'exécutable. +1 de toute façon. – sharptooth

5

Si elles ne sont jamais appelées, supprimez les références de votre projet. Si elles sont appelées, corrigez le foutu problème. Il n'y a pas d'autre option ici.

1

Il existe quelques exceptions notables, mais la plupart des projets OpenSource ne sont pas conçus pour être créés sous VisualStudio.

En règle générale, pour un port Windows, il est préférable d'utiliser soit cygwin ou le système mingw. Mon conseil est généralement pour mingw, à moins que le programme utilise beaucoup d'appels Unix OSey comme les tuyaux et les signaux.

Questions connexes