2017-10-13 9 views
0

J'essaye de croiser un serveur Web (Monkey-Server). Mon environnement hôte est un Ubuntu 64 bits et l'environnement cible est une architecture de bras. Toutes les dépendances sont disponibles dans le dossier. Il y a une option pour faire l'installation aussi, mais j'ai pensé que la construire localement sur ma machine hôte en transférant le dossier sur le système embarqué était une bonne idée. Je suis capable de compiler avec succès et exécuter le serveur web sur le système cible, mais il se plaint qu'il n'est pas capable de trouver le fichier de configuration. Le serveur Web recherche le fichier de configuration dans le chemin où il a été compilé sur la machine hôte.Comment un programme pense-t-il qu'il a été construit dans un répertoire différent avec cmake lors de la compilation croisée?

Exemple: Il essaie d'ouvrir un dossier qui existe uniquement sur la machine hôte

ERROR: Cannot find/open /home/username/src/camera_root/monkey-server/conf/

Mais il devrait en fait être à la recherche du fichier de configuration dans

/monkey-server/conf/

Voici ce que mon fichier toolchain ressemble

Set(CMAKE_SYSTEM_NAME Linux) 

SET(CMAKE_C_COMPILER /home/username/src/compilerdir/arm-hisiv300-linux-uclibcgnueabi-gcc) 

#SET(CMAKE_SYSROOT /home/username/src/camera_root) 
#SET(CMAKE_FIND_ROOT_PATH /home/username/src/camera_root) 

Comme vous pouvez le voir au bas de mon fichier toolchain, j'ai essayé de mettre bo th sysroot et find_root_path sans chance.

Lorsque j'ai essayé la ligne SET (CMAKE_SYSROOT/home/nom d'utilisateur/src/camera_root) que je ne pouvais pas compiler parce que le compilateur C était incapable de compiler un programme de test simple.

Comment aider le serveur Web à trouver son propre fichier de configuration?

Voici un lien vers ce que le CMakeList.txt ressemble si cela aide: https://paste.ofcode.org/KMWyk3ZpB93LdhURZAcn2G

+0

Le fichier de configuration à charger ne devrait pas être quelque chose que vous devez décider au moment de la construction. Juste comprendre comment passer le chemin correct comme argument lors du lancement du programme. La plupart des programmes supportent une option '--help' pour vous dire ce genre d'informations d'utilisation. –

+0

@JohnZwinck C'est ce que je pensais aussi, mais toutes les opérations d'E/S du serveur se font sur le chemin de l'hôte. Je peux par exemple voir les chemins vers le répertoire du journal, dans le fichier de configuration est faux. Je crains que le serveur web ne fonctionne pas correctement car beaucoup de chemins sont incorrects. – Cortex

+0

Habituellement, la compilation croisée pour la cible non-hôte implique ** l'installation ** avec * CMAKE_INSTALL_PREFIX * adapté à la machine ** cible **. Mais 'make install' sur la machine hôte est remplacé par' make DISTDIR = <...> install' ou même 'cpack'. Cela fonctionne pour les projets qui s'ajustent eux-mêmes dans le répertoire * CMAKE_INSTALL_PREFIX *. Cependant, votre projet semble s'ajuster sur les répertoires source et build (je ne vois pas d'utilisation * CMAKE_INSTALL_PREFIX * dedans). – Tsyvarev

Répondre

0

Ceci est une question ancienne et l'OP a probablement évolué maintenant, mais pour quelqu'un d'autre avec le même problème, le singe a un --configdir et un commutateur --configserver pour définir l'emplacement des fichiers de configuration comme une solution de contournement pour ce problème.