永久添加g++的包含路径和共享库

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

它有效。

但我想永久地为g++添加这些.so库和包含文件,这样我就不需要每次都输入它们。我还希望它适用于其他应用程序。

我正在使用ubuntu。

有人能帮我吗?非常感谢。


2
也许现在是学习如何创建简单 makefile 的时候了。 - goji
是的,在这里你绝对需要使用makefile。https://dev59.com/lHM_5IYBdhLWcg3wMgAF - Steven Huang
3个回答

3

以下是一个非常基本的Makefile示例,使用pkg-config,并且您应该与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教程,这样你就能更好地理解这个例子。

现在,你可以使用“make”命令代替手动输入的shell命令。


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

2
您需要进一步调查三件不同的事情:
  • 影响编译器的环境变量。由于您正在使用GCC,我可以指出this page。特别是,您应该阅读以下内容:

LIBRARY_PATH

LIBRARY_PATH的值是一个由冒号分隔的目录列表,与PATH非常相似。当配置为本地编译器时,GCC在搜索特殊链接器文件时会尝试这些指定的目录,如果它无法使用GCC_EXEC_PREFIX找到它们。使用GCC进行链接时,还会使用这些目录来搜索-l选项的普通库(但-L指定的目录排在前面)。

  • 操作系统搜索共享动态库的方式。由于您正在使用Linux,我建议参考this page(讨论ldconfig)。

最重要的是:

“软件构建工具”或“Makefile”是什么?你可以参考Scons页面、CMake页面或GNU Make页面。简而言之,每个选项都提供了一种描述如何构建您的软件并使用简单命令(取决于您选择的系统,如sconscmakemake)实际构建它的方法。总之,我没有对你的问题有一个明确的答案。我只能建议你去了解这些内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接