Doxygen
Doxygen的的安装需要用到 cmake
1 | yum install -y cmake |
这个命令安装的是 cmake 2.x 版本,
而doxygen依赖的是 cmake 3.x ,
所以我们要安装的是
1 | yum install -i cmake3 |
doxygen源代码的编译还依赖了其他一些库:flex, bison,这些可以直接通过yum安装的。
官方安装教程
Issues
“font” is an unregitered media type
1 |
|
1 |
|
需要重启terminal
安装mysql-connector-c++报错,找不到openssl
因为没有装openssl-devel
1 | yum install -y openssl-devel |
openssl和openssl-devel的区别
- openssl是执行码部分
- openssl-devel包含了头文件,头文件参考,某些库文件等开发相关的东西
1 | cmake ./mysql-connector-c++-8.0.12-src -DWITH_JDBC=ON -DCMAKE_INSTALL_PREFIX=/usr/local/mysql |
1 | cmake --build . --config release --target install |
还是没有用,阅读官网文件发现jdbc需要编译的话,需要去手动通过git submodule去更新,于是放弃了当前不知谁提供的mysql-connector-c++-8.0.12src*,去github上找到了对应的 mysql-connector-cpp on github
1 | git clone https://github.com/mysql/mysql-connector-cpp.git |
1 | yum what provides libxxx* |
又出了Could not find “libmysqlclient_r.a libmysqlclient.a”的问题
xxxxxqconfig.pri’ has modification time 4711 s in the future
报这个错误的原因是因为vmware镜像是别人导出来的,然后本地的一些文件修改时间早于当前时间。
这次遇到的主要是QT/gcc_64/mkspec下一个文件以及QT/gcc_64/mkspecs/modules下面的所有文件,
针对单个文件运行
1 | touch -m *.pri |
文件夹下面的文件:
1 | touch -m *.* |
qt creator运行一下clean就可以正常build了。
qt: no such file or directory
qt 找不到某些头文件,但是在项目预览中明显是有的;
查看 .pro 文件,HEADERS*里面也是有的;
但是 *INCLUDEPATH 里面没有,在 INCLUDEPATH 里面加入相对路径之后就好了。
qt creator: no rule to make target
复制别的项目,修改了项目的一些文件名,build 时出现了这个错误,clean 和重启 qt 都还存在这个问题。
删除QT Creator 编译生成的build-[xxx]-Desktop_Qt_5_10_0_GCC_64bit-Debug然后重新编译就可以了,
这个只是一个缓存问题。
qt creator断点问题
qt creator断点进入的代码错误,这是因为进入的是so,而so里面的共享库代码是老版本的,导致用新库去调试项目的时候进入的方法对不上。我遇到的实际情况是,本来应该是调用一个返回stuct指针的方法,返回了一个值为4的int64,从而导致这个指针的地址直接是4而导致在访问这个struct的时候内存出错。
cannot open shared object file:No such file or directory
参考
Qt Creator构建出来的可执行文件找不到一些系统里面安装了的三方库,根据参考链接的提醒,去 /etc/ld.so.conf 中加入so坐在的路径即可。
但是我看到 /etc/ld.so.conf 的内容是这样的:
1 | include ld.so.conf.d/*.conf |
也就是这个文件其实就比遍历了 ld.so.conf.d 下的所有文件,
这些文件都是三方库的路径配置文件。
于是我在这个文件夹下面加了我的 mongo.conf ,然后在其中写入我的 mongocxx.so._noabi 的路径,然后执行:
1 | sudo ldconfig |
搞定。
was not declared in this scope
经查证是形成了环形依赖
1 | //a.h |
jump to case label -fpermissive
作用域问题
1 |
1 | switch(hehe){ |
上面由于case语句没有明确的大括号来标注他的作用范围,导致了很奇怪的问题,jump to case label只是其中之一,如果case语句里面有同名临时变量的话,也会产生redefined的问题,按照他的提示去掉redefined的定义后,还是会报其他错。解决方案就是把case语句的作用域用大括号包含起来,一直到break。
这个不像其他语言,case默认到break都是他的作用范围。
std::vector reverse vs resize
reverse是预留
resize是重新分配大小
vector.push_back是拷贝,不是引用传递
查看目录结构的插件
tree可以用来查看目录结构,但是需要安装
1 | yum install -y tree |
Valgrind
dlopen(‘.so‘)出 发现 undefined symbol
打包so的时候是没有问题的,在使用dlopen加载的时候报错undefined symbol。
在一个可执行的项目中将这个so以external library的方式导入进来进行编译,发现有个类的析构函数定义的,但是没有在cpp中实现。
在cpp中实现此函数之后,就正常了。
journalctl
journalctl 用来查询 systemd-journald 服务收集到的日志。systemd-journald 服务是 systemd init 系统提供的收集系统日志的服务。
1 | journalctl -ex |