1)如果是动态库。
比较顺利的编译方式 1,选择动态库,2.加入-fPIC 。3.库之间的调用,也加上-l 库名。
3)gdb,最起码要掌握基本用法。才比较好排错。不然呢。。。。
gdb file 开始调试。
gdb catch throw 一般都是抛出错误,开始使用gdb吧。 所以捕捉异常必须要。而cath catch有时候是不行的,因为如果没有捕捉错误,那么已经到了最上层的堆栈,就不太好查找错误。
b main .
b 27 .设置断点。
c 继续。
n
r 运行。
bt 好了。到异常了。查看堆栈吧。ide解决不了的。这里可以一目了然了。这里表示当前的堆栈情况。那么基本就可以万能解决异常问题了。
最起码的这几点,应该要会。开始不会用。感觉好难的样子。其实只用基本的话。比任何知识点都简单。比html 还简单。。。。上手10分钟。
4) 关于include.
感觉这个简单的一个宏都是一个坑。
如果运行项目根本不需要某个头文件。只是类库需要。
而类库使用-l编译的。所以直接打上了头文件名字。
但是到了运行项目编译的时候。又要重新加上。
所以
include ,
对于运行主项目来说。全部加上(尽管只是类库需要,因为类库只打上了头文件的名字,主项目一层一层寻找的时候,只找到头文件名字,而并不能感知当时类库编译时,所设定的搜索路径,c++是单文件编译)。
这样下面的类库就可以自己include 自己的。只打上头文件名字。
link
对于主项目来说。全部加上。(尽管可能主项目只需要某个高层类库。但是比如多线程,类库用到了,还是需要主项目来连接多线程的类库的)
所以类库可以不link所需要的基础类库?只需要include ?
5)又碰到一个坑,
类库修改了。忘记编译,调用类库的时候。连参数的值都传错,返回时候,居然把调用函数的栈都清空了。
编译还是要加项目依赖,来编译。