7

我尝试在终端中使用 g++ 编译 .cpp 文件:

g++ -o main main.cpp \
  -I/usr/include/glib-2.0 \
  -I/usr/include/json-glib-1.0 \
  -I/usr/lib/x86_64-linux-gnu/glib-2.0/include/ \
  -L/usr/lib/x86_64-linux-gnu -ljson-glib-1.0 -lglib-2.0

它有效。

但我想添加这些 .so 库并永久包含 g++ 文件,这样我就不需要每次都输入这些文件。我也想让它适用于其他应用程序。

我正在使用 ubuntu。

谁能帮帮我?非常感谢您。

4

3 回答 3

3

这是使用 pkg-config 的 Makefile 的一个非常基本的示例,无论如何您都应该将其与 glib 一起使用,从而消除了很多痛苦:

CXXFLAGS += $(shell pkg-config --cflags glib-2.0) $(shell pkg-config --cflags json-glib-1.0)
LIBS     += $(shell pkg-config --libs glib-2.0) $(shell pkg-config --libs json-glib-1.0)

all: main

main: main.o
    $(CXX) $(CXXFLAGS) main.o -o main $(LIBS)

clean:
    rm -f main main.o

给自己找一个 gnu make 教程可能是明智的,这样你就可以更好地理解这个例子。

现在,您无需运行手动键入的 shell 命令,只需执行“make”即可。

于 2013-09-15T04:33:53.700 回答
2

最好、最灵活的方法是通过构建系统,使用 Make 或 CMake 或类似的东西。但是有一个严重的学习曲线。现在只创建一个脚本文件来运行您从命令行成功使用的相同命令可能更简单。

我假设您正在使用 bash shell。你可以只编辑一个文件——称之为“compile.bash”。在文件的第一行,键入“#!/bin/bash”。这告诉系统将此文件解释为 bash 脚本文件。然后在随后的一行或多行中,键入您刚刚在问题中提供的命令,就像您之前使用它们一样。保存文件。然后从命令行运行此命令:“chmod +x compile.bash”(不带引号)。确保新文件位于您编译的目录中,您只需键入:“compile.bash”,而不是之前使用的长命令行。

示例文件“compile.bash”

#!/bin/bash
g++ -o main main.cpp -I/usr/include/glib-2.0 -I/usr/include/json-glib-1.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include/ -L/usr/lib/x86_64-linux-gnu -ljson-glib-1.0 -lglib-2.0
于 2013-09-15T04:25:02.550 回答
2

您需要进一步调查三个不同的事情:

  • 影响编译器的环境变量。由于您使用的是 GCC,我可以指出这个页面。特别是,您应该阅读以下内容:

LIBRARY_PATH

的值LIBRARY_PATH是以冒号分隔的目录列表,很像PATH. 当配置为本地编译器时,GCC 会在搜索特殊链接器文件时尝试指定的目录,如果使用GCC_EXEC_PREFIX. 在为 -l 选项搜索普通库时,使用 GCC 进行链接也使用这些目录(但使用 -L 指定的目录首先出现)。

  • 操作系统搜索共享动态库的方式。由于您使用的是 Linux,我会推荐这个页面(讨论ldconfig)。

而且,最重要的是:

  • 什么是软件构建工具Makefile。为此,您可以参考Scons页面、CMake页面或GNU Make页面。简而言之,每个选项都为您提供了描述如何构建软件的方法,然后使用简单的命令( 、 或 ,具体取决于您选择的系统)实际scons构建cmakemake

所以,总而言之,我对你的问题没有答案。我只能建议你调查这些。

于 2013-09-15T04:26:39.307 回答