从Windows迁移到Ubuntu

时间:2010-05-02 19:46:41

标签: c++ windows linux ubuntu

我曾经在Windows中使用Microsoft Visual C ++进行编程,我需要将一些可移植程序(用可移植的C ++编写)变成跨平台,或者至少我可以为两个Linux发布我的程序的工作版本和Windows。

我是Linux应用程序开发的新手(并且很少使用操作系统本身)。

所以,今天,我安装了Ubuntu 10.04 LTS(通过Wubi)并装备了Code :: Blocks和g ++编译器作为我的主要武器。然后我编译了我的第一个Hello World linux程序,我对输出程序感到困惑。

我可以通过Code :: Blocks中的“Build and Run”菜单选项运行我的程序,但是当我尝试通过文件浏览器从外部启动编译的应用程序时(在/ media / MyNTFSPartition / MyProject / bin / Release中;是的,我将它保存在我的NTFS分区中),程序没有显示出来。

为什么呢?我没想到了。

我需要将WindowsMicrosoft Visual Studio心态更改为LinuxCode::Blocks心态。

所以我想出了这些问题:

  1. 如何在外部(IDE外部)执行我编译的linux程序?
    • 在Windows中,我只是运行生成的可执行文件(.exe)文件
  2. 我如何分发我的linux应用程序?
    • 在Windows中,我只是使用相应的DLL文件(如果有的话)分发可执行文件
  3. Linux中LIB(静态库)和DLL(动态库)的等价物是什么?如何使用它们?
    • 在Windows / Visual Studio中,我只需将所需的库添加到项目设置中的附加依赖项,我的程序将自动链接到所需的静态库(-ies)/ DLL。
  4. 是否可以使用C ++库的“二进制形式”(如果提供),这样我就不需要重新编译整个库源代码了?
    • 在Windows中,是的。有时会提供预编译的* .lib文件。
  5. 如果我想在Linux中创建一个wxWidgets应用程序,我应该选择哪个包用于Ubuntu? wxGTK还是wxX11?我可以在X11下运行wxGTK程序吗?
    • 在Windows中,我使用wxMSW,当然。
  6. 如果问题没有。 4是可能的,有预编译的wxX11 / wxGTK库存在吗?没试过深谷歌搜索。
  7. 很抱歉提出很多问题,但我对这些Linux开发基础知识感到很困惑。

    任何形式的帮助将不胜感激=)

    感谢。

9 个答案:

答案 0 :(得分:16)

  

如何执行已编译的linux   外部程序(IDE外部)?在   Windows,我只是运行生成的   可执行(.exe)文件

在Linux上你也这样做。唯一的区别是在Linux上当前目录默认不在PATH中,所以通常你会这样做:

./myapp

如果将当前目录添加到路径

PATH=".:$PATH"
然后以类似Windows的方式

myapp

会这样做,但由于存在安全风险,建议不要这样做,至少在共享环境中是这样(你不想让某人留下/ tmp / ls)。

  

如何分发我的linux应用程序?   在Windows中,我只是使用相应的DLL文件(如果有的话)分发可执行文件

如果你认真分发,你应该了解.deb(Ubuntu,Debian)和.rpm(RedHat,CentOS,SUSE)。这些是“软件包”,使用户可以使用特定于分发的方式安装应用程序。

还有一些安装程序项目与Windows安装程序生成器的工作方式类似,但我建议首先研究前一个路径。

  

Linux中的LIB(静态库)和DLL(动态库)的等价物是什么?如何使用它们?

.a(静态)和.so(动态)。您可以使用它们与Windows上的方式大致相同,当然也可以使用特定于gcc的编译选项。我不使用Code :: Blocks所以我不知道他们的对话框是什么样的,最后它是关于添加-llibrary到链接选项(猜猜:在windows上它是关于添加/ llibrary ;-))

  

是否可以使用C ++库的“二进制形式”(如果提供),以便我不需要重新编译整个库源代码?

是。分布中已经存在大量的库。

另请注意,如果您使用.deb和.rpm进行分发,则可以说“我的应用程序需要安装此类和此类库”,并且它们将从分发存档中安装。这是推荐的方式,一般情况下,您不应该分发您的库副本。

  

如果我想在Linux中创建一个wxWidgets应用程序,我应该选择哪个包用于Ubuntu? wxGTK还是wxX11?我可以在X11下运行wxGTK程序吗?

首先尝试wxGTK,对话框可能看起来更好,应该使用gnome主题等。

  

如果问题没有。 4是可能的,有预编译的wxX11 / wxGTK库存在吗?没试过深度谷歌搜索。

尝试

apt-cache search wx

(或产生你的Ubuntu软件中心并搜索wx)

简而言之:您将在分发档案中找到所需的一切。

答案 1 :(得分:3)

  1. 导航到包含已编译程序的文件夹并执行./program
  2. 发送程序以及任何.so个文件
  3. .a是静态库,.so是共享库。
  4. 是的,但通常你需要先自己编译。
  5. 不确定wxWidgets发行版。

答案 2 :(得分:2)

由于Ubuntu附带了wxGTK软件包,你绝对应该构建它们。对于开发,您应该使用调试版本,因此最好自己构建,但是针对系统提供的软件包进行部署构建似乎更好。

wxX11是比wxGTK更糟糕的选择,仅用于wxGTK不存在或需要比现有更新的GTK库的系统。

答案 3 :(得分:1)

为什么不坚持使用您所知道的并在.NET中开发? Ubuntu以Mono为原生。您可以继续使用Visual C ++或升级到C#,让您的生活更轻松。

答案 4 :(得分:1)

对Linux新手的一般建议,但从技术上讲是开头的,是:你应该学会正确使用你选择的发行版。

在您的情况下,这意味着学习如何获得Ubuntu提供的正确开发包。例如,其他一些人建议您下载要使用的库的源代码,但更好的方法是使用Ubuntu的软件包系统下载您要编程的库,以及该库的标题(通常放在一个单独的包中)以及库的调试符号(通常也在一个单独的包中)。

在Ubuntu的System-> Administration菜单中查看 Synaptic 工具,该工具允许您搜索Internet上的软件包存储库。您几乎肯定会找到所需库以及所有工具的包。

答案 5 :(得分:0)

1,Unix通常没有可执行文件的特定扩展名 - 所以myprog.exe只是myprog。 如果IDE不自动执行此操作,您可能必须将其设置为可执行文件,请键入“chmod + x myprog”

5,对于wxWindows,我会下载源代码并构建它,检查构建说明,但这可能只是“configure; make; make install”的问题。通常在Unix中,您构建libs源代码,以便他们可以正确地找到您机器上的所有组件 - 您还有示例源等。

答案 6 :(得分:0)

我刚刚在rlbond的回答中添加了一些信息。

  1. 它取决于Linux版本。如果你使用Ubuntu - 创建一个deb-package。 (http://ubuntuforums.org/showthread.php?t=51003
  2.   
        

    我可以在X11下运行wxGTK程序吗?

      

    是的,如果您安装了wxGTK软件包:)

答案 7 :(得分:0)

这不是真的会回答你的问题,但我认为这是一个有效的建议 您有两个问题需要处理:

  1. Linux环境。
  2. 确保您的计划是 便携式的。
  3. 如果我是你,我会在Windows上加载CodeBlocks并运行Cygwin或Mingw,这将帮助您确保您的代码可以跨平台移植。您熟悉环境,可以最大限度地提高工作效率,克服操作系统障碍。

    如果您对上述内容感到满意,请将代码移至Linux。在那时,任何移植工作都应该是微不足道的。

答案 8 :(得分:0)

当你说你的程序没有显示时我假设你的意思是它在文件浏览器中,但是当你双击它时你有一个忙碌的光标片刻然后什么也没发生?

如果是这样,则意味着程序无法运行,可能是因为它无法找到与其链接的动态库。要诊断问题,您可以从终端运行它,然后您将被告知问题是什么。

您可能需要阅读ld.so的手册页,即输入

man ld.so

进入终端。这告诉您Linux动态库链接器在运行时查找库的位置。它还引用了另一个名为ldd的有用工具,如果您正在进行Linux开发,我建议您熟悉它。