How to compile a project having dynamic libarary;
============== c ===============
[qa@qa133 edu-gdb]$ mkdir HelloWorld
[qa@qa133 HelloWorld]$ vi HelloWorld.c
#include <stdio.h>
void sayHello(void){
printf("Hello, World!\n");
}
[qa@qa133 HelloWorld]$ vi HelloWolrd.h
void sayHello(void);
[qa@qa133 HelloWorld]$ vi Main.c
#include "HelloWorld.h"
int main(void){
sayHello();
return 0;
}
[qa@qa133 HelloWorld]$ gcc -c HelloWorld.c -o HelloWorld.o
[qa@qa133 HelloWorld]$ gcc -c Main.c -o Main.o
[qa@qa133 HelloWorld]$ gcc -shared -Wall -fPIC HelloWorld.o -o libHelloWorld.so
[qa@qa133 HelloWorld]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/u2/testing/users/xiyang_/edu-gdb/HelloWorld
[qa@qa133 HelloWorld]$ cc -o Main Main.o -lHelloWorld -B /u2/testing/users/xiyang_/edu-gdb/HelloWorld
[qa@qa133 HelloWorld]$ ls
HelloWorld.c HelloWorld.o Main Main.o
HelloWorld.h libHelloWorld.so Main.c
[qa@qa133 HelloWorld]$ ./Main
Hello, World!
[qa@qa133 HelloWorld]$ ldd Main
linux-gate.so.1 => (0xffffe000)
libHelloWorld.so (0xb7f34000)
libc.so.6 => /lib/libc.so.6 (0xb7e03000)
/lib/ld-linux.so.2 (0xb7f37000)
============= C++ =============
[qa@qa133 HelloDave]$ vi HelloDave.C
NOTE:
If you are on a unix machine, save the file with the filename hello.C (make sure it ends with .C, not .c, If you are on a Windows machine, save the file with the filename hello.cpp.
[qa@qa133 HelloDave]$ g++ HelloDave.C -o HelloDave
#include <iostream>
using namespace std;
int main(){
cout << "Hello, World!" << endl;
return 0;
}
[qa@qa133 HelloDave]$ ./HelloDave
Hello, World!
NOTE:
Both
#include<iostream.h>
or
#include<iostream>
using namespace std;
are OK.
#include<iostream.h> generally used in c
#include<iostream>
using namespace std; generally used in C++
=========== GDB ===============
#include <stdio.h>
static char buff [256];
static char* string;
int main ()
{
printf ("Please input a string: ");
gets (string);
printf ("\nYour string is: %s\n", string);
}
上面这个程序非常简单,其目的是接受用户的输入,然后将用户的输入打印出来。该程序使用了一个未经过初始化的字符串地址 string,因此,编译并运行之后,将出现 Segment Fault 错误:
$ gcc -o bugging -g bugging.c
$ ./bugging
Please input a string: asfd
Segmentation fault (core dumped)
为了查找该程序中出现的问题,我们利用 gdb,并按如下的步骤进行:
1.运行 gdb bugging 命令,装入 bugging 可执行文件;
2.执行装入的 bugging 命令 run;
3.使用 where 命令查看程序出错的地方;
4.利用 list 命令查看调用 gets 函数附近的代码;
5.唯一能够导致 gets 函数出错的因素就是变量 string。用print命令查看 string 的值;
6.在 gdb 中,我们可以直接修改变量的值,只要将 string 取一个合法的指针值就可以了,为此,我们在第8行处设置断点 break 8;
7.程序重新运行到第 8行处停止,这时,我们可以用 set variable 命令修改 string 的取值;
8.然后继续运行,将看到正确的程序运行结果
分享到:
相关推荐
**GAudio Library 2.2.1.0:专业音频处理与播放的C/C++库** GAudio Library是一个强大的音频处理库,专为开发者设计,用于实现高效且灵活的音频播放和音效处理功能。其最新版本2.2.1.0提供了丰富的特性,旨在简化...
spring full libarary
本文将深入探讨"u-blox Altium Designer libarary 库文件",帮助设计者更好地理解和利用这一资源。 首先,"u-blox Altium Designer libarary 库文件"是专门为u-blox芯片设计的元器件库,包含了u-blox系列芯片的原理...
《Smartbit Library 开发手册》全面解析 在IT行业中,智能比特(Smartbit)库是一个广泛应用于网络设备性能测试和验证的重要工具。本手册详细介绍了Smartbit库的使用方法和功能,旨在帮助开发者和测试工程师更好地...
4. `headers`: 可能包含头文件(`.h`),供开发者使用JNI编写与Tomcat Native库交互的C/C++代码。 5. `README`/`INSTALL`/`LICENSE`: 文件提供安装指南、许可信息以及使用注意事项。 安装和配置这些本机库通常涉及...
### 使用GLib库高效管理C语言中的数据结构 #### 知识点一:GLib库简介及作用 - **GLib库**是一个开源库,它为C语言程序提供了丰富的数据处理工具,帮助开发者更有效地管理和操作数据。 - GLib通过一系列复杂的数据...
Enterprise Library,通常被称为EntLib,是由微软开发的一个开源软件开发库,主要面向企业级应用程序的构建。这个库提供了一系列可重用的、针对常见企业级编程任务的组件,包括数据访问、日志记录、异常处理、配置...
Module developer’s guide to FreeCAD source code by Qingfeng Xia http://www.iesensor.com • 2015-09-18 version 0.1 for FreeCAD version 0.16-dev • 2016-09-18 version 0.2 for FreeCAD version 0.17-dev ...
<<<<<<< HEAD wkk图书馆 图书馆 ...For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-load
【标题】"松下FPWin pro Modbus Library" 指的是松下公司为FPWin pro编程软件开发的Modbus通信库。FPWin pro是一款广泛应用于松下电工FX系列PLC(可编程逻辑控制器)的编程工具,它支持图形化编程界面,便于用户进行...
《Cadence Starter Library初探:焊盘与封装详解》 Cadence Starter Library是电子设计自动化领域中的一个重要资源,尤其对于使用Cadence软件进行电路设计的工程师来说,它提供了丰富的焊盘(.pad)文件和封装文件...
在CATIA Computer-Aided Application (CAA) 二次开发中,主要涉及两种模式:Shared Library(共享库)和Executable(可执行文件)。这两种模式各有特点,适用于不同的开发需求和场景。 **Shared Library(共享库)...
《Cadence Starter Library Part2:深入理解焊盘与封装文件》 Cadence Starter Library Part2 是针对电子设计自动化(EDA)领域中Cadence软件使用者的一个重要资源库,它包含了丰富的焊盘文件(.pad文件)和封装...
【Android代码-安装公共类库】是针对Android应用开发中的一个通用库——MCommon的介绍。这个库由开发者Im Wangchao提供,旨在为Android项目提供一些常用的、经过优化的功能模块,以简化开发过程,提高代码复用性。...
ZippX 从zippyshare网站获取直接下载链接的Java Libarary(仅用于教育目的) 它是一个非常简单的Libarary,它使您工作变得简单,这里是文档文献资料它非常易于使用。 只需按照步骤1.安装2.使用方法安装要首先使用它...
GPS导航定位系统简介 GPS卫星信号 GPS接收机工作原理及信号分析 DGPS和AGPS原理 GNSS技术发展 GPS应用领域 基于ESG的GPS 测试解决方案 GPS 测试市场及竞争分析
一个具有sweetalert libarary功能的Angularjs模块。 在js代码和html中使用sweetalert是一个指令和提供者。 这些mudole用途: 通过开发的SweetAlert AngularJS包装器: : 和 ng-sweet-alert一个angularjs指令,...
Simulink是MATLAB环境中的一个强大的仿真工具,主要用于建模、模拟和分析多领域动态系统。它提供了图形化用户界面,使得工程师和科学家能够通过拖放方式构建模型,而无需编写大量的代码。Simulink在众多领域都有广泛...
标题中的“FOCAS2 Library_FANUC_函数库.zip”表明这是一个关于FANUC公司FOCAS2函数库的压缩文件,适用于不同的操作系统平台。FOCAS2是FANUC开放式控制应用系统(FANUC Open Control Application System)的第二代...
【标题】:Spring Boot与Dozer库整合应用详解 【描述】:在现代Java开发中,Spring Boot以其简洁、高效的特点成为了广泛采用的框架。而Dozer则是一款强大的对象映射库,它可以帮助我们在不同对象之间进行数据转换,...