回复: 【提问】关于Qt编程中可调用到的库
#6 [XChinux 11-02 10:24]
调用某个库中的东西不需要实现代码啊,只需要头文件和库文件。
在你编译和连接的时候,要指定头文件路径以及库文件路径,这些都是在Makefile中写明了的。
在生成Makefile的时候,系统会自动地把相关的环境变量的值加进去(头文件和库文件目录),
如果你调用的库它没有自动包含进去的话,你就需要自己修改环境变量加进去,或者修改.pro文件加进去。
#7 [youngki 11-02 10:32]
你说的都对,那么如果我想调用系统调用的话我要不要包含什么头文件呢??
如果不需要的话,我该怎么做呢
#8 [tdns 11-03 13:38]
看来你还不大明白编译器这个东西到底是咋回事。
首先,头文件是用来声明的,就是告诉编译器有这个函数或者这个类,至于函数的实现在哪儿,我头文件管不着,可能在.o文件里,也可能在.a或者.so的库里,你编译器在连接的时候按照设置的路径自己找去。而.cpp文件是用来实现的,就是把头文件声明过的函数用代码实现出来,在编译的时候被编译器编译为.o文件。当你的编译完成以后,连接器负责把你的工程里的所有用到的函数,按照设置的查找路径,统统连接到一起,不管这些函数的实现是在标准库里还是在你工程中由.cpp生成的.o文件里。最后生成都是机器码的二进制的可执行程序。
编译和连接是两个步骤,要弄明白。如果调用库函数,编译的时候只用到了库函数的头文件,连接的时候才会用到库。
而上面的头文件、cpp和库之间的关系,是通过makefile来管理的,makefile告诉编译器如何编译工程,到哪里去找头文件和库文件。不管你用什么集成开发环境,到最后都要用这个makefile来编译工程。
以前我们都要自己写makefile,这是件很麻烦的事,但是自从有了qmake工作就轻松多了。Qt里面的qmake就是用来帮助你生成makefile的,写.pro文件要比直接写makefile文件容易多了。
至于Qt里面的uic和moc,这些是预编译器,uic负责将.ui文件转化成.h和.cpp文件,而moc负责将所有含有Q_OBJECT宏的文件翻译成编译器可以编译的.cpp文件,因为Q_OBJECT这个宏编译器不认识,它是Qt自己定义的。最终交给编译器处理的都是编译器能够编译的.h和.cpp文件。
不知道我说明白没有。
#9 [youngki 11-03 14:55]
谢谢先,说的很详细.
我刚上手. 以前也不是学计算机的. 可能是我说的不够清晰.
其实我真正想知道的是如何系统调用.比如说在程序中如何调用linux中的mount .
最好有个简单的例子.
#10 [youngki 11-07 18:25]
为什么没人回答阿