首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

Linux c 学习札记

2012-12-24 
Linux c 学习笔记1、编译好的程序运行时找不到共享库文件(.so)文件问题原因默认搜寻共享库文件为系统根相关

Linux c 学习笔记

1、编译好的程序运行时找不到共享库文件(.so)文件问题原因默认搜寻共享库文件为系统根相关目录,或者使用export指定shell相关参数改变搜寻路径(export LD_LIBRARY_PATH=./)相关文章:http://blog.sina.com.cn/s/blog_690c46500100kxhd.html2、编译过程中在当前目录下查找不到需要的共享库文件libsegimg.so库文件lib为默认命名规则,实际编译过程中-l参数后只跟segimg即可3、gcc编译c程序出现“__gxx_personality_v0”只知道“__gxx_personality_v0”的错误信息表示试图用gcc编译c++的代码而产生错误。网上给出的解决方案多是在编译时加上“-lstdc++”参数,也就是把gcc当作g++来用。但这显然不是我想要的,加上“-lstdc++”参数编译出的目标文件几乎肥了一倍,没理由一个c程序偏按c++编译。我仔细检查,程序中并没有什么c++的代码;而且c++的代码大概也通不过TC2.0吧。于是乎,就无可救药地再次开始怀疑编译器,唉……最后在博客oliliango.cublog.cn的一篇文章上找到了答案:“__gxx_personality_v0这样的编译错误,是由于源代码的文件后缀名和代码的语法不相符合,比如用C的语法的文件,选择了cpp这样的后缀名(或者<大写C>这样的后缀名)”。一检查,果然,因为源代码使用TC编辑过,所以文件名全转换成了大写,所以就出毛病了。4、for loop initial declaration used outside C99 mode 错误C99标准支持下面这种for 循环的变量i的定义及初始化方式:for (int i=1; i<10; i++){     printf("Hello C!");}C99标准之外的C标准支持下面这种for 循环的变量i的定义及初始化方式:int i=1;for (i=1; i<10; i++){     printf("Hello C!");}gcc增加 -std=c99 参数进行编译可以支持c99标准5、gcc编译时头文件中的函数未定义等奇怪错误主要原因还是代码是.c还是.cpp导致的,经验就是奇怪问题先考虑.c/.cpp改名先试试6、查看程序错误信息先设置环境变量ulimit -c unlimited,之后程序出错后将生成core文件,使用gdb  test32 core.287857、C/C++区别c不支持函数重载 不支持try catch 不支持bool 8、编译器无法找到libseg.so.2.1 类似的共享库使用ln -s libseg.so.2.1 libseg.so 生成链接关系9、struct 返回异常值 声明后即自动初始化 且值为随机,如需保证正确,每次声明后先赋值10、用strncpy memcpy之类出现异常的字符关键是字符串末尾必须有'\0',这个得自己加11、GCC/G++编译共享库及静态库gcc -fPIC -c message.cgcc -shared -o libmessage.so message.olibmessage.so以lib开头是linux下动态库的默认规矩gcc -c message.c -o  message.o ar cqs libmessage.a message.o  

热点排行