【发布时间】:2012-01-05 07:47:29
【问题描述】:
我正在用 c++ 编写一个小型应用程序,对此我有一些疑问。我基本上是一名 Java 开发人员,现在正在转向 C++。
-
1234563 /li>
我在 linux 中安装了一些库或软件。之后,如果我在终端中输入,它会 ping 软件。例如php,安装后可以从终端使用php。这是如何运作的?我可以使用我的简单 c++ 项目来执行此操作吗?
【问题讨论】:
我正在用 c++ 编写一个小型应用程序,对此我有一些疑问。我基本上是一名 Java 开发人员,现在正在转向 C++。
我在 linux 中安装了一些库或软件。之后,如果我在终端中输入,它会 ping 软件。例如php,安装后可以从终端使用php。这是如何运作的?我可以使用我的简单 c++ 项目来执行此操作吗?
【问题讨论】:
1) Q1 的答案是使用静态链接的库进行编译。例如使用 gcc 编译器:
# gcc -static myfile.c -o myfile
2) Q2 的答案是将可执行文件的绝对路径附加到 $PATH 环境变量。例如在 Bash shell 中:
# export PATH=${PATH}:/home/user/pathofexecutable
上述设置仅对您所做的那个终端是临时的。要使其可用于您机器中的所有终端,请将上述导出命令添加到 /home/user/.bashrc 文件中。
【讨论】:
是的。您使用一个称为静态链接的过程,它将所有库链接到一个大的可执行文件中。在 ./configure 脚本(来自 autotools)中,您使用 --enable-static 标志。在构建程序时,您使用-static 标志。静态库是带有.a 后缀的库;共享库使用.so,有时带有版本号后缀)。
PHP 不是一个库,它是一种提供自己的命令行界面的语言(即可执行文件)。您的 C++ 可执行文件也可以类似地工作,您只需从cin(在<iostream>)获取输入并将结果写入cout,使用cerr 获取错误消息。
您的标题问题“如何在 linux 中使用 c++ 制作库”(与使用库相反):您使用 ar 程序将多个 .o 文件链接到单个 .a 库文件中。您还可以使用ranlib 清理.a 文件。请阅读 man 页面了解这些命令的使用方式。
【讨论】:
对于问题 1,您希望将程序编译为静态可执行文件。 (只需将 -static 传递给 g++。)它会使程序变得更大,因为它需要包含通常作为库保存的内容的副本。
对于问题 2,我很确定您的意思是在 PATH 中有一个程序。键入echo $PATH 以查看当前机器上的路径。如果您将程序安装在这些目录之一中,它将从任何地方运行。 (很可能是/usr/local/bin/)
【讨论】: