简单的问题是这些在编译期间不必调用库的方法吗?我的意思是,我想简单地调用g ++ main.cpp而不调用g ++ main.cpp -lGL -lGLU -lGLEW -lSTL -lMyMother等等......我知道,makefile或简单的shell脚本,但是我想使它优雅的方式 - 在cpp代码中调用这些库 - 就像'使用GL'一样。g ++:编译时没有-l标志
回答
由于您使用的是GCC,因此您可以创建/修改specs file以添加所需的标志。
如果你不喜欢键入标志,你确实应该使用makefile。
嗯,我想你是对的 - 每个人都在使用Makefiles是有原因的。 ;) – 2014-10-29 19:24:01
不要修改规格文件以在其中添加库。 – 2014-10-29 19:40:49
从技术上讲,你可以通过dlopen()
动态加载库并调用它的函数(我假设你在* nix上)。虽然这不是一回事,我怀疑会让你的生活更轻松。除此之外,没有指定在源文件中使用哪个库的便携方式。
谢谢,得试试这个方法。我只应该记住,如果某件事不起作用,那是因为我的懒惰。 – 2014-10-29 19:24:38
在Linux上,您可以使用pkg-config和shell扩展。使用pkg-config --list-all
来发现它已知的软件包(您可以添加.pc
文件来添加新软件包)。例如,GTK应用mygtkapp.c
可以用
gcc -Wall -g $(pkg-config --cflags gtk+-x11-3.0) -c mygtkapp.c
后来与
gcc -g mygtkapp.o $(pkg-config --libs gtk+-x11-3.0) -o mygtkapp
注意的参数gcc
顺序总是问题链接进行编译。当然,使用g++
来编译C++应用程序GCC。
也考虑使用Makefile
,如this one。然后,只需键入make
即可构建您的软件(例如make clean
来清理构建树)。
您可能会在您的Makefile
中使用奇怪的技巧,例如用awk
解析你的C++代码中的一些注释来提供make
,但我认为这是一个坏主意。
从技术上讲,你仍然可以通过-I
和-D
标志(在编译时)和-L
和-l
标志(在连接时),以gcc
或g++
但pkg-config
实用程序(或make
....)正在产生这些标志。
如果您使用emacs
编辑源代码,则可以在C文件末尾添加注释以设置emacs
的一些编译命令,请参阅this。
PS。我不建议为此目的配置您的GCC规格文件。
- 1. 编译没有ros的roscpp(使用g ++)
- 2. g ++没有编译我的C++程序
- 3. g ++在编译静态库时是否有意义添加优化标志
- 4. C++编译器标志11 - 没有找到计时文件
- 5. 如何使用-g调试标志编译boost?
- 6. 使用gdb而无需使用“-g”标志编译
- 7. #ifdef标志告诉gcc和g ++编译器之间的区别?
- 8. 关于编译/安装程序时-l(blah)标志的两个基本问题
- 9. 编译时-pthread标志的意义
- 10. 在g ++中使用-mno-cygwin标志有没有副作用?
- 11. 如何在编译时确定OS/X上的编译标志?
- 12. mod_rewrite REQUEST_FILENAME更改规则后没有L标志
- 13. nvcc -Xptxas -v编译器标志没有作用
- 14. 编译器内是否有预编译IPV6的标志
- 15. Objective-C编译器标志
- 16. 是否有编译iPad时设置的特定Xcode编译器标志?
- 17. 有没有办法转储g ++编译程序的类布局
- 18. 编译时没有库[LWJGL]
- 19. g ++编译失败,Cmake不编译
- 20. 用g ++编译器编译Multi2Sim
- 21. 使用g ++编译器编译boost.asio
- 22. 没有libc编译
- 23. 源文件具有不同编译器标志的Makefile
- 24. 获取没有-g标志的gdb可读符号?
- 25. 用g ++编译时出错MacOS Sierra
- 26. gcc/g ++:编译大文件时出错
- 27. 在g ++上编译时出错
- 28. 是否有devenv的标志在编译时禁用PDB一代?
- 29. 使用-l标志链接静态库
- 30. 无论如何获得编译标志文件中使用的编译标志?
不,与VC++不同,没有办法通过在源代码中指定它来告诉GCC哪些库链接到哪个库。使用makefile。 – 2014-10-29 19:45:47