2010-05-02 9 views
9

Solía ​​programar en Windows con Microsoft Visual C++ y necesito hacer que algunos de mis programas portátiles (escritos en C++ portátil) sean multiplataforma, o al menos puedo lanzar una versión funcional de mi programa para Linux y Windows.Pasando de Windows a Ubuntu

Soy un recién llegado al desarrollo de aplicaciones Linux (y rara vez uso el sistema operativo en sí).

Así que, hoy, instalé Ubuntu 10.04 LTS (a través de Wubi) y equipado Code :: Blocks con el compilador g ++ como mi arma principal. Luego compilé mi primer programa Hello World de Linux y me confundí sobre el programa de salida.

Puedo ejecutar mi programa a través de la opción de menú "Crear y ejecutar" en Code :: Blocks, pero cuando traté de iniciar la aplicación compilada externamente a través de un Explorador de archivos (en/media/MyNTFSPartition/MyProject/bin/Release ; sí, lo guardé en mi partición NTFS), el programa no apareció.

¿Por qué? Me quedé sin idea.

Necesito cambiar mi mentalidad Windows y Microsoft Visual Studio a Linux y Code::Blocks mindset.

Así me ocurrió con estas preguntas:

  1. ¿Cómo puedo ejecutar mis programas de Linux compilados externa (fuera del IDE)?
    • En Windows, simplemente ejecute el ejecutable generado (.exe)
  2. ¿Cómo puedo distribuir mi aplicación Linux?
    • En Windows, simplemente distribuir los archivos ejecutables con los archivos DLL correspondientes (si los hay)
  3. ¿Cuál es el equivalente de LIBs (biblioteca estática) y DLL (Dynamic Library) en Linux y cómo ¿usalos, usalos a ellos?
    • En Windows/Visual Studio, simplemente agrego las bibliotecas necesarias a las Dependencias Adicionales en la Configuración del Proyecto, y mi programa se vinculará automáticamente con la biblioteca estática requerida (-ies)/DLL.
  4. ¿Es posible utilizar el "formulario binario" de una biblioteca C++ (si se proporciona) para que no tenga que volver a compilar todo el código fuente de la biblioteca?
    • En Windows, sí. A veces se proporcionan archivos precompilados * .lib.
  5. Si quiero crear una aplicación wxWidgets en Linux, ¿qué paquete debería elegir para Ubuntu? wxGTK o wxX11? ¿Puedo ejecutar el programa wxGTK bajo X11?
    • En Windows, uso wxMSW, por supuesto.
  6. Si la pregunta no. 4 se responde posible, se precompila la biblioteca wxX11/wxGTK existe por ahí? No he intentado una búsqueda profunda en Google.

Lo siento por hacer muchas preguntas, pero estoy realmente confundido sobre estos fundamentos el desarrollo de Linux.

Cualquier tipo de ayuda será apreciada =)

Gracias.

+7

Buena suerte. Ejecuté Linux durante años, pero con Windows Boot para desarrollo, porque las herramientas para Linux parecen la edad de piedra. Ahora solo uso Windows todo el tiempo ... – rlbond

+2

Esto se preguntaría mejor, ya que algunas preguntas y algunas (por ejemplo, el equivalente de la biblioteca) se han preguntado antes. –

+1

Creo que estarías mucho mejor con la biblioteca Qt y QtCreator IDE. –

Respuesta

16

¿Cómo puedo ejecutar mis programas compilados de linux externamente (fuera de IDE)? En de Windows, que sólo tiene que ejecutar la generada ejecutable (.exe)

En Linux que hagan lo mismo. La única diferencia es que en Linux el directorio actual es por defecto no está en PATH, por lo general lo hace:

./myapp 

Si agrega directorio actual a la ruta

PATH=".:$PATH" 

entonces forma similar a Windows

myapp 

funcionarán, pero esto no se recomienda debido a los riesgos de seguridad, al menos en entornos compartidos (no desea ejecutar/tmp/ls dejado por alguien).

¿Cómo puedo distribuir mi aplicación de Linux? En Windows, simplemente distribuir los archivos ejecutables con los archivos DLL correspondientes (si lo hay)

Si usted es serio acerca de la distribución, es probable que debe aprender acerca .deb (Ubuntu, Debian) y .rpm (RedHat, CentOS, SUSE).Esos son "paquetes" que facilitan al usuario la instalación de la aplicación utilizando la distribución específica.

También hay algunos proyectos de instalación que funcionan de forma similar a los generadores de instalación de Windows, pero recomiendo estudiar primero la ruta anterior.

¿Cuál es el equivalente a LIBs (biblioteca estática) y DLL (biblioteca dinámica) en Linux y cómo usarlos?

.a (estática) y .so (dinámico). Los usa más o menos de la misma manera que en Windows, por supuesto usando opciones de compilación específicas de gcc. No uso Code :: Blocks, así que no sé cómo se ven sus diálogos, al final se trata de agregar -llibrary a las opciones de vinculación (adivinen qué: en Windows se trata de agregar/bibliografía ;-))

¿Es posible utilizar la "forma binaria" de una biblioteca C++ (si se proporciona) para que no tenga que volver a compilar todo el código fuente de la biblioteca?

Sí. Y muchas bibliotecas ya están presentes en las distribuciones.

Tenga en cuenta también que si utiliza .deb's y .rpm para la distribución, puede decir "mi aplicación necesita tal y tales bibliotecas instaladas" y se instalarán desde los archivos de distribución. Y esta es la forma recomendada, en general, NO debe distribuir su copia de las bibliotecas.

Si quiero crear una aplicación wxWidgets en Linux, ¿qué paquete debería elegir para Ubuntu? wxGTK o wxX11? ¿Puedo ejecutar el programa wxGTK bajo X11?

Trate wxGTK en primer lugar, los diálogos pueden verse mejor, temas de GNOME deben utilizarse etc.

Si la pregunta no. 4 se responde posible, se precompila la biblioteca wxX11/wxGTK existe por ahí? No he intentado una búsqueda profunda en Google.

Trate

apt-cache search wx 

(o generar su Centro de Software de Ubuntu y la búsqueda de wx)

En resumen: usted encontrará todo lo que necesita en los archivos de distribución.

+0

Me gustaría +1 dos veces si pudiera, para el punto sobre el uso de la información de dependencia en paquetes para bibliotecas, en lugar de agrupar. – harms

+0

@harms - Solucionado eso para usted. –

+1

Le advierto encarecidamente que no agregue el directorio actual de PATH. Si bien es un problema de seguridad realmente malo si se hace como root [cringe], sin duda puede terminar siendo lo suficientemente peligroso solo para un solo usuario, o al menos conducir a un comportamiento inesperado bastante extraño. especialmente cierto si anteponerlo como sugieres; es bastante raro querer anular algo que ya está instalado, y es probable que desee adjuntarlo ('PATH =" $ PATH:. "') si realmente lo quiere allí. – Cascabel

3
  1. Vaya a la carpeta con su programa compilado y ejecutar ./program
  2. enviar el programa, además de cualquier .so archivos
  3. .a es biblioteca estática, .so bibliotecas es compartido.
  4. Sí, pero a menudo primero tiene que compilarlo.

No estoy seguro acerca de las distribuciones de wxWidgets, sin embargo.

0

1, Unix generalmente no tiene una extensión particular para un ejecutable, por lo que myprog.exe sería simplemente myprog. Puede que tenga que configurarlo para que sea ejecutable si el IDE no lo hace automáticamente, escriba "chmod + x myprog"

5, para wxWindows me gustaría descargar la fuente y compilarla, verifique las instrucciones de compilación pero es probablemente solo sea una cuestión de "configurar; hacer; hacer instalar". Por lo general, en Unix compila libs de fuente para que puedan encontrar correctamente todos los componentes en su máquina; también tiene la fuente de ejemplos, etc.

0

Acabo de agregar algo de información a la respuesta de rlbond.

  1. Depende de la versión de Linux. Si usa un Ubuntu, cree un paquete deb. (http://ubuntuforums.org/showthread.php?t=51003)

¿Puedo ejecutar el programa wxGTK bajo X11?

Sí, si tiene instalado el paquete wxGTK :)

1

¿Por qué no seguir con lo que sabe y se desarrollan en .NET? Ubuntu viene nativo con Mono. Puedes seguir usando Visual C++ o intensificar a C# y hacer tu vida mucho más fácil.

0

Esto realmente no va a responder a sus preguntas, pero creo que es una recomendación válida.
Tiene dos cuestiones que están tratando de hacer frente a:

  1. El entorno Linux.
  2. Asegurándose de que su programa sea portátil.

Si fuera usted, cargaría CodeBlocks en Windows y correría contra Cygwin o Mingw, eso lo ayudará a asegurarse de que su código sea portable en todas las plataformas. Está familiarizado con el entorno y obtendría la máxima productividad superando el obstáculo del sistema operativo.

Una vez que esté satisfecho con lo anterior, tome su código y muévalo a Linux. En ese punto, cualquier esfuerzo de portabilidad debería ser trivial.

2

Dado que Ubuntu viene con paquetes wxGTK definitivamente deberías construir contra ellos. Para el desarrollo, debe usar una versión de depuración, por lo que podría ser bueno construir usted mismo, pero para el desarrollo de la implementación frente a los paquetes que el sistema proporciona parece mejor.

wxX11 es una opción peor que wxGTK, úsela solo para sistemas donde wxGTK no existe o requiere bibliotecas GTK más nuevas que las disponibles.

+1

En Ubuntu, los paquetes de la biblioteca necesarios para desarrollar contra una biblioteca generalmente terminan con ' -dev'. Ejemplo: 'libwxgtk2.8-dev' para wxGTK 2.8. Ni siquiera necesita compilarse para tener una versión de depuración: los símbolos de depuración para las bibliotecas de distribución también están empaquetados (por ejemplo,' libwxgtk2.8 -dbg'). – caf

1

Un consejo general para los recién llegados a Linux, pero que tienen una mentalidad técnica para empezar, es: Debe aprender a usar la distribución elegida correctamente.

En su caso, eso significa aprender a adquirir los paquetes de desarrollo adecuados proporcionados por Ubuntu. Por ejemplo, algunas otras personas le aconsejan que descargue la fuente de las bibliotecas que va a utilizar, pero la mejor forma es usar el sistema de paquete de Ubuntu para descargar las bibliotecas que desea programar contra, junto con los encabezados de esa biblioteca (a menudo se incluye en un paquete aparte), así como los símbolos de depuración para la biblioteca (también a menudo en un paquete separado).

Busque en el menú Sistema-> Administración en Ubuntu para la herramienta Synaptic, que le permite buscar en los repositorios de paquetes en Internet. Es casi seguro que encontrará paquetes para las bibliotecas que necesita, así como todas las herramientas.

0

Cuando dice que su programa no apareció, supongo que quiere decir que estaba allí en el buscador de archivos, pero al hacer doble clic, ¿tiene un cursor ocupado por un momento y luego no pasa nada?

Si es así, significa que el programa no se ejecutó, probablemente porque no pudo encontrar las bibliotecas dinámicas con las que está vinculado. Para diagnosticar el problema, puede ejecutarlo desde una terminal y luego se le informará cuál es el problema.

Es posible que desee leer la página del manual para ld.so es decir, el tipo

man ld.so 

en un terminal. Esto le indica dónde el enlazador de bibliotecas dinámicas de Linux busca bibliotecas en tiempo de ejecución.También lo remite a otra herramienta útil llamada ldd con la que recomiendo que se familiarice si está haciendo un desarrollo de Linux.

Cuestiones relacionadas