2016-07-27 1 views
1

En essayant d'écrire un bloc OOT pour Gnuradio, j'ai couru cmake ../, puis make. Le processus de make construit avec succès certains objets, mais quand il arrive à l'étape:Gnuradio OOT ne pas voir les sources?

Linking CXX executable test-XXXXXXXX 

il y a le problème:

libgnuradio-XXXXXXXX.so: undefined reference to 'YYYYYYYY' 

YYYYYYYY est une fonction définie dans un fichier .cc, que j'ajouter à la _impl.cc pour le bloc utilisant un en-tête. Cette source n'est apparemment pas trouvée, bien qu'elle se trouve dans le même répertoire source que le fichier _impl.cc. Cmake vous avertit explicitement de ne pas apporter de modifications au Makefile généré, et de toute façon c'est un makefile assez complexe, donc j'hésiterais à essayer de jouer avec. Existe-t-il un autre moyen de faire make pour inclure cette source supplémentaire lors de la liaison?

+0

Vous devrez ajouter votre code source. Sans, c'est juste deviner, ce que je serais moins opposé à sur une liste de diffusion, où la nature dialectique de la discussion est plus facile à embrasser, mais sur si les questions bien posées devraient certainement inclure le code en question. –

Répondre

0

Votre meilleur pari est de regarder le CMakeLists.txt en haut de votre dossier OOT. Il est très probable que vous rencontriez un problème de lien et qu'une dépendance de package ne soit pas satisfaite. L'utilitaire cmake find_package peut être utilisé pour déterminer si une dépendance est disponible sur le système. Si vous regardez le répertoire cmake/Modules sous le dossier OOT principal, il devrait y avoir quelques exemples. Cmake est livré avec de nombreux modules, donc il est probable que ce dont vous avez besoin existera. En ajoutant une logique find_package au fichier principal CMakeLists.txt, puis en soufflant le répertoire de construction et en le faisant à nouveau et en exécutant "cmake ../", le problème de dépendance devrait être apparent. En d'autres termes, quelle que soit la libgnuradio - *., Donc que thinks est manquant doit appartenir à un paquet qui n'est pas installé sur votre système. L'utilisation de find_package le confirmera, puis la réponse sera de l'installer.

Regardez d'autres fichiers CMakeLists.txt, disons, dans gr-digital, pour des exemples de paquetage find_package.