Passer de Windows à Ubuntu

J’avais l’habitude de programmer sous Windows avec Microsoft Visual C ++ et j’ai besoin de faire en sorte que certains de mes programmes portables (écrits en C ++ portable) soient multi-plateformes, ou du moins je puisse publier une version de travail pour Linux et Windows.

Je suis un nouveau venu dans le développement d’applications Linux (et utilise rarement le système d’exploitation lui-même).

Donc, aujourd’hui, j’ai installé Ubuntu 10.04 LTS (via Wubi) et équipé Code :: Blocks avec le compilateur g ++ comme arme principale. Ensuite, j’ai compilé mon tout premier programme Linux Hello World, et j’ai confondu le programme de sortie.

Je peux exécuter mon programme via l’option de menu “Build and Run” de Code :: Blocks, mais lorsque j’ai essayé de lancer l’application compilée en externe via un navigateur de fichiers (dans / media / MyNTFSPartition / MyProject / bin / Release; oui, je enregistré dans ma partition NTFS), le programme ne s’est pas présenté.

Pourquoi? J’ai manqué d’idée.

Je dois changer mon état d’esprit Windows et Microsoft Visual Studio mentalité Linux et Code::Blocks .

J’ai donc posé ces questions:

  1. Comment puis-je exécuter mes programmes Linux compilés en externe (en dehors de l’IDE)?
    • Sous Windows, je lance simplement le fichier exécutable (.exe) généré
  2. Comment puis-je dissortingbuer mon application Linux?
    • Dans Windows, je dissortingbue simplement les fichiers exécutables avec les fichiers DLL correspondants (le cas échéant)
  3. Quel est l’équivalent de LIBs (bibliothèque statique) et de DLL (bibliothèque dynamic) dans Linux et comment les utiliser?
    • Dans Windows / Visual Studio, j’ajoute simplement les bibliothèques requirejses aux dépendances supplémentaires dans les parameters du projet, et mon programme sera automatiquement lié à la bibliothèque statique requirejse (-ies) / DLL.
  4. Est-il possible d’utiliser la “forme binary” d’une bibliothèque C ++ (si fournie) afin de ne pas avoir à recomstackr tout le code source de la bibliothèque?
    • Dans Windows, oui. Parfois, des fichiers précompilés * .lib sont fournis.
  5. Si je veux créer une application wxWidgets sous Linux, quel paquet choisir pour Ubuntu? wxGTK ou wxX11? Puis-je exécuter le programme wxGTK sous X11?
    • Sous Windows, j’utilise wxMSW, bien sûr.
  6. Si question no. 4 est répondu possible, la bibliothèque wxX11 / wxGTK précompilée existe-t-elle? N’a pas essayé la recherche google en profondeur.
    • Dans Windows, il existe un projet appelé “wxPack” ( http://wxpack.sourceforge.net/ ) qui me permet de gagner beaucoup de temps.

Désolé de poser beaucoup de questions, mais je suis vraiment confus sur ces fondamentaux de développement Linux.

Toute aide serait appréciée =)

Merci.

Comment puis-je exécuter mes programmes Linux compilés en externe (en dehors de l’IDE)? Sous Windows, je lance simplement le fichier exécutable (.exe) généré

Sous Linux, vous faites la même chose. La seule différence est que sous Linux, le répertoire actuel n’est pas par défaut dans PATH, donc généralement vous faites:

 ./myapp 

Si vous ajoutez le répertoire actuel au chemin

 PATH=".:$PATH" 

puis comme windows-like

 myapp 

fera, mais ce n’est pas recommandé en raison des risques de sécurité, au moins dans les environnements partagés (vous ne voulez pas exécuter / tmp / ls laissé par quelqu’un).

Comment puis-je dissortingbuer mon application Linux? Dans Windows, je dissortingbue simplement les fichiers exécutables avec les fichiers DLL correspondants (le cas échéant)

Si vous êtes sérieux au sujet de la dissortingbution, vous devriez probablement en savoir plus sur .deb (Ubuntu, Debian) et .rpm (RedHat, CentOS, SUSE). Ce sont des “packages” qui permettent à l’utilisateur d’installer l’application de manière spécifique à la dissortingbution.

Il y a également quelques projets d’installation qui fonctionnent de la même manière que les générateurs Windows Installer, mais je recommande d’abord d’étudier l’ancien chemin.

Quel est l’équivalent de LIBs (bibliothèque statique) et de DLL (bibliothèque dynamic) dans Linux et comment les utiliser?

.a (statique) et .so (dynamic). Vous les utilisez plus ou moins de la même manière que sous Windows, bien sûr en utilisant les options de compilation spécifiques à gcc. Je n’utilise pas Code :: Blocks donc je ne sais pas à quoi ressemblent leurs dialogs, à la fin il s’agit d’append une bibliothèque aux options de liaison (devinez quoi: sur Windows, il s’agit d’append / llibrary ;-))

Est-il possible d’utiliser la “forme binary” d’une bibliothèque C ++ (si fournie) afin de ne pas avoir à recomstackr tout le code source de la bibliothèque?

Oui. Et de nombreuses bibliothèques sont déjà présentes dans les dissortingbutions.

Notez également que si vous utilisez des fichiers .deb et .rpm pour la dissortingbution, vous pouvez dire “mon application nécessite l’installation de telles bibliothèques” et elles seront installées à partir des archives de dissortingbution. Et c’est recommandé, en général, vous ne devez PAS dissortingbuer votre copie des bibliothèques.

Si je veux créer une application wxWidgets sous Linux, quel paquet choisir pour Ubuntu? wxGTK ou wxX11? Puis-je exécuter le programme wxGTK sous X11?

Essayez d’abord wxGTK, les dialogs peuvent être plus beaux, les thèmes gnome doivent être utilisés, etc.

Si question no. 4 est répondu possible, la bibliothèque wxX11 / wxGTK précompilée existe-t-elle? N’a pas essayé la recherche google en profondeur.

Essayer

 apt-cache search wx 

(ou créez votre centre logiciel Ubuntu et recherchez wx)

En bref: vous trouverez tout ce dont vous avez besoin dans les archives de dissortingbution.

  1. Accédez au dossier avec votre programme compilé et exécutez ./program
  2. Envoyer le programme, plus les fichiers .so
  3. .a est une bibliothèque statique, .so est une bibliothèque partagée.
  4. Oui, mais souvent vous devez d’abord le comstackr vous-même.

Je ne suis pas sûr des dissortingbutions de wxWidgets.

Comme Ubuntu est fourni avec les paquets wxGTK, vous devez absolument les comstackr. Pour le développement, vous devez cependant utiliser une version de débogage, il peut donc être utile de vous construire vous-même, mais pour un déploiement en fonction des packages fournis par le système, cela semble mieux.

wxX11 est un choix pire que wxGTK, utilisez-le uniquement pour les systèmes où wxGTK n’existe pas ou nécessite des bibliothèques GTK plus récentes que celles disponibles.

Pourquoi ne pas restr fidèle à ce que vous connaissez et développez dans .NET? Ubuntu est originaire de Mono. Vous pouvez continuer à utiliser Visual C ++ ou passer à C # pour vous simplifier la vie.

Un conseil général pour les nouveaux arrivants de Linux, mais qui sont techniquement conscients de commencer, est: Vous devriez apprendre à utiliser correctement la dissortingbution que vous avez choisie.

Dans votre cas, cela signifie apprendre à acquérir les bons packages de développement fournis par Ubuntu. Par exemple, d’autres personnes vous conseillent de télécharger la source des bibliothèques que vous allez utiliser, mais le meilleur moyen est d’ utiliser le système de paquets d’Ubuntu pour télécharger les bibliothèques que vous souhaitez programmer , ainsi que les en-têtes de cette bibliothèque (souvent mettre dans un paquet séparé) ainsi que les symboles de débogage pour la bibliothèque (souvent aussi dans un paquet séparé).

Regardez dans le menu Système-> Administration d’Ubuntu pour l’outil Synaptic , qui vous permet de rechercher les référentiels de paquets sur Internet. Vous trouverez certainement des paquets pour les bibliothèques dont vous avez besoin, ainsi que tous les outils.

1, Unix n’a généralement pas d’extension particulière pour un exécutable – donc myprog.exe ne serait que myprog. Vous devrez peut-être le définir pour être exécutable si l’EDI ne le fait pas automatiquement, tapez “chmod + x myprog”

5, Pour wxWindows, je téléchargerais le source et le construisais, vérifiais les instructions de construction, mais il ne s’agissait probablement que de “configurer; make; make install”. Généralement, sous Unix, vous construisez une source de formulaire libs afin qu’ils puissent trouver correctement tous les composants de votre machine – vous avez également la source des exemples, etc.

Je viens d’append quelques informations à la réponse de rlbond.

  1. C’est sous la version Linux. Si vous utilisez un Ubuntu – créez un paquet deb. ( http://ubuntuforums.org/showthread.php?t=51003 )

Puis-je exécuter le programme wxGTK sous X11?

Oui, si le paquet wxGTK est installé 🙂

Cela ne va pas vraiment répondre à vos questions, mais je pense que c’est une recommandation valable.
Vous avez deux problèmes à résoudre:

  1. L’environnement Linux
  2. Assurez-vous que votre programme est portable.

Si j’étais vous, je chargerais CodeBlocks sous Windows et exécuterais Cygwin ou Mingw, ce qui vous aidera à vous assurer que votre code est portable entre les plates-formes. Vous connaissez bien l’environnement et vous obtiendrez une productivité maximale en surmontant l’obstacle du système d’exploitation.

Une fois que vous êtes satisfait de ce qui précède, prenez votre code et déplacez-le vers Linux. À ce stade, tout effort de portage devrait être sortingvial.

Lorsque vous dites que votre programme ne s’est pas présenté, je suppose que vous voulez dire qu’il était présent dans le navigateur de fichiers, mais lorsque vous double-cliquez dessus, vous avez un curseur occupé pendant un moment, puis rien ne s’est passé?

Si c’est le cas, cela signifie que le programme n’a pas réussi à s’exécuter, probablement parce qu’il n’a pas trouvé les bibliothèques dynamics auxquelles il est lié. Pour diagnostiquer le problème, vous pouvez l’exécuter à partir d’un terminal et vous serez informé du problème.

Vous voudrez peut-être lire la page de manuel pour ld.so c.-à-d.

 man ld.so 

dans un terminal. Cela vous indique où l’éditeur de liens de bibliothèque dynamic Linux recherche les bibliothèques au moment de l’exécution. Il vous renvoie également à un autre outil utile appelé ldd que je vous recommande de vous familiariser si vous faites du développement Linux.