- 浏览: 63265 次
- 性别:
- 来自: 武汉
Linux中也有类似Windows中DLL的变成方法,只不过名称不同而已。在Linux中,动态链接叫做Standard Object,生成的动态链接文件为*.so。详细请参考相关文档。
开发环境:Eclipse 3.4.2
G++:4.3.2
1. 创建动态链接库
(1)在Eclipse中创建新的C++工程
File->New->Project->C++->C++ Project,选择Shared Library。
(2)创建源代码文件
File->New->Source File,指定名称为shared.cc
(3)编写源码
view plaincopy to clipboardprint?
/*
* Test.cc
*
* Created on: Oct 10, 2009
* Author: fify
*/
#include <iostream>
using namespace std;
void show()
{
cout << "Shared Library." << endl;
}
/*
* Test.cc
*
* Created on: Oct 10, 2009
* Author: fify
*/
#include <iostream>
using namespace std;
void show()
{
cout << "Shared Library." << endl;
}
编译之后将在工程目录下生成一个libshared.so文件,这就是我们要用的动态链接库文件
2. 调用动态链接库文件
(1)创建C++工程,选择Executable类型工程
(2)添加Source File,并编写源码
view plaincopy to clipboardprint?
//============================================================================
// Name : Import.cpp
// Author : Fify
// Version :
// Copyright : Fify copyleft
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
using namespace std;
void show();
int main()
{
show();
return 0;
}
//============================================================================
// Name : Import.cpp
// Author : Fify
// Version :
// Copyright : Fify copyleft
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
using namespace std;
void show();
int main()
{
show();
return 0;
}
(3)设置导入动态库
Project->Properties->C/C++ Build->Settings->Tool Settings->GCC C++ Linker->Libraries
添加Libraries (-l): shared
添加Library search path (-L): {刚才编译生成的*.so文件路径}
(4)编译该项目
3. 运行含动态链接库的程序
点击运行,会出现以下错误:error while loading shared libraries: libShared.so: cannot open shared object file: No such file or directory ,因为系统无法从默认位置找到动态链接库文件。修改系统默认搜索链接库的路径,程序即可顺利执行,输出:
Shared Library.
修改动态库搜索路径的方法有五种,参考:http://www.linuxidc.com/Linux/2009-12/23660p2.htm,这里不在详细介绍
众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及该动态库的其它资源了。在Linux 中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指定。
方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径。
可以通过编辑配置文件/etc/ld.so.conf来指定动态库的搜索路径,该文件中每行为一个动态库搜索路径。每次编辑完该文件后,都必须运行命令ldconfig使修改后的配置生效。我们通过例1来说明该方法。
例1:
我们通过以下命令用源程序pos_conf.c(见程序1)来创建动态库 libpos.so,详细创建过程请参考文[1]。
# gcc -c pos_conf.c
# gcc -shared -fPCI -o libpos.so pos_conf.o
#
#include <stdio.h>
void pos()
{
printf("/root/test/conf/lib\n");
}
程序1: pos_conf.c
接着通过以下命令编译main.c(见程序2)生成目标程序pos。
# gcc -o pos main.c -L. -lpos
#
void pos();
int main()
{
pos();
return 0;
}
程序2: main.c
然后把库文件移动到目录/root/test/conf/lib中。
# mkdir -p /root/test/conf/lib
# mv libpos.so /root/test/conf/lib
#
最后编辑配置文件/etc/ld.so.conf,在该文件中追加一行"/root/test/conf/lib"。
运行程序pos试试。
# ./pos
./pos: error while loading shared libraries: libpos.so: cannot open shared object file: No such file or directory
#
出错了,系统未找到动态库libpos.so。找找原因,原来在编辑完配置文件/etc/ld.so.conf后,没有运行命令ldconfig,所以刚才的修改还未生效。我们运行ldconfig后再试试。
# ldconfig
# ./pos /root/test/conf/lib
#
程序pos运行成功,并且打印出正确结果。
方法二:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。
通过设定环境变量LD_LIBRARY_PATH也可以指定动态库搜索路径。当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔。下面通过例2来说明本方法。
例2:
我们通过以下命令用源程序pos_env.c(见程序3)来创建动态库libpos.so。
# gcc -c pos_env.c
# gcc -shared -fPCI -o libpos.so pos_env.o
#
#include <stdio.h>
void pos()
{
printf("/root/test/env/lib\n");
}
程序3: pos_env.c
测试用的可执行文件pos可以使用例1中的得到的目标程序pos,不需要再次编译。因为pos_conf.c中的函数pos和pos_env.c中的函数pos 函数原型一致,且动态库名相同,这就好比修改动态库pos后重新创建该库一样。这也是使用动态库的优点之一。
然后把动态库libpos.so移动到目录/root/test/conf/lib中。
# mkdir -p /root/test/env/lib
# mv libpos.so /root/test/env/lib
#
我们可以使用export来设置该环境变量,在设置该环境变量后所有的命令中,该环境变量都有效。
例如:
# export LD_LIBRARY_PATH=/root/test/env/lib
#
但本文为了举例方便,使用另一种设置环境变量的方法,既在命令前加环境变量设置,该环境变量只对该命令有效,当该命令执行完成后,该环境变量就无效了。如下述命令:
# LD_LIBRARY_PATH=/root/test/env/lib ./pos /root/test/env/lib
#
程序pos运行成功,并且打印的结果是"/root/test/env/lib",正是程序pos_env.c中的函数pos的运行结果。因此程序pos搜索到的动态库是/root/test/env/lib/libpos.so。
方法三:在编译目标代码时指定该程序的动态库搜索路径。
还可以在编译目标代码时指定程序的动态库搜索路径。这是通过gcc 的参数"-Wl,-rpath,"指定(如例3所示)。当指定多个动态库搜索路径时,路径之间用冒号":"分隔。
例3:
我们通过以下命令用源程序pos.c(见程序4)来创建动态库libpos.so。
# gcc -c pos.c
# gcc -shared -fPCI -o libpos.so pos.o
#
#include <stdio.h>
void pos()
{
printf("./\n");
}
程序4: pos.c
因为我们需要在编译目标代码时指定可执行文件的动态库搜索路径,所以需要用gcc命令重新编译源程序main.c(见程序2)来生成可执行文件pos。
# gcc -o pos main.c -L. -lpos -Wl,-rpath,./
#
再运行程序pos试试。
# ./pos ./
#
程序pos运行成功,输出的结果正是pos.c中的函数pos的运行结果。因此程序pos搜索到的动态库是./libpos.so。
以上介绍了三种指定动态库搜索路径的方法,加上默认的动态库搜索路径/lib和/usr/lib,共五种动态库的搜索路径,那么它们搜索的先后顺序是什么呢?
在 介绍上述三种方法时,分别创建了动态库./libpos.so、 /root/test/env/lib/libpos.so和/root/test/conf/lib/libpos.so。我们再用源程序 pos_lib.c(见程序5)来创建动态库/lib/libpos.so,用源程序pos_usrlib.c(见程序6)来创建动态库 /usr/lib/libpos.so。
#include <stdio.h>
void pos()
{
printf("/lib\n");
}
程序5: pos_lib.c
#include <stdio.h>
void pos()
{
printf("/usr/lib\n");
}
程序6: pos_usrlib.c
这样我们得到五个动态库libpos.so,这些动态库的名字相同,且都包含相同函数原型的公用函数pos。但存储的位置不同和公用函数 pos 打印的结果不同。每个动态库中的公用函数pos都输出该动态库所存放的位置。这样我们可以通过执行例3中的可执行文件pos得到的结果不同获知其搜索到了哪个动态库,从而获得第1个动态库搜索顺序,然后删除该动态库,再执行程序pos,获得第2个动态库搜索路径,再删除第2个被搜索到的动态库,如此往复,将可得到Linux搜索动态库的先后顺序。程序pos执行的输出结果和搜索到的动态库的对应关系如表1所示:
程序pos输出结果 使用的动态库 对应的动态库搜索路径指定方式
./ ./libpos.so 编译目标代码时指定的动态库搜索路径
/root/test/env/lib /root/test/env/lib/libpos.so 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
/root/test/conf/lib /root/test/conf/lib/libpos.so 配置文件/etc/ld.so.conf中指定的动态库搜索路径
/lib /lib/libpos.so 默认的动态库搜索路径/lib
/usr/lib /usr/lib/libpos.so 默认的动态库搜索路径/usr/lib
表1: 程序pos输出结果和动态库的对应关系
创建各个动态库,并放置在相应的目录中。测试环境就准备好了。执行程序pos,并在该命令行中设置环境变量LD_LIBRARY_PATH。
# LD_LIBRARY_PATH=/root/test/env/lib ./pos ./
#
根据程序pos的输出结果可知,最先搜索的是编译目标代码时指定的动态库搜索路径。然后我们把动态库./libpos.so删除了,再运行上述命令试试。
# rm libpos.so
rm: remove regular file `libpos.so'? y
# LD_LIBRARY_PATH=/root/test/env/lib ./pos /root/test/env/lib
#
根据程序pos的输出结果可知,第2个动态库搜索的路径是环境变量LD_LIBRARY_PATH指定的。我们再把/root/test/env/lib/libpos.so删除,运行上述命令。
# rm /root/test/env/lib/libpos.so
rm: remove regular file `/root/test/env/lib/libpos.so'? y
# LD_LIBRARY_PATH=/root/test/env/lib ./pos /root/test/conf/lib
#
第3个动态库的搜索路径是配置文件/etc/ld.so.conf指定的路径。删除动态库/root/test/conf/lib/libpos.so后再运行上述命令。
# rm /root/test/conf/lib/libpos.so
rm: remove regular file `/root/test/conf/lib/libpos.so'? y
# LD_LIBRARY_PATH=/root/test/env/lib ./pos /lib
#
第4个动态库的搜索路径是默认搜索路径/lib。我们再删除动态库/lib/libpos.so,运行上述命令。
# rm /lib/libpos.so
rm: remove regular file `/lib/libpos.so'? y
# LD_LIBRARY_PATH=/root/test/env/lib ./pos /usr/lib
#
最后的动态库搜索路径是默认搜索路径/usr/lib。
综合以上结果可知,动态库的搜索路径搜索的先后顺序是:
1.编译目标代码时指定的动态库搜索路径;
2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;
4.默认的动态库搜索路径/lib;
5.默认的动态库搜索路径/usr/lib。
在上述1、2、3指定动态库搜索路径时,都可指定多个动态库搜索路径,其搜索的先后顺序是按指定路径的先后顺序搜索的。对此本文不再举例说明,有兴趣的读者可以参照本文的方法验证。
原文地址 http://www.linuxidc.com/Linux/2009-12/23660.htm
开发环境:Eclipse 3.4.2
G++:4.3.2
1. 创建动态链接库
(1)在Eclipse中创建新的C++工程
File->New->Project->C++->C++ Project,选择Shared Library。
(2)创建源代码文件
File->New->Source File,指定名称为shared.cc
(3)编写源码
view plaincopy to clipboardprint?
/*
* Test.cc
*
* Created on: Oct 10, 2009
* Author: fify
*/
#include <iostream>
using namespace std;
void show()
{
cout << "Shared Library." << endl;
}
/*
* Test.cc
*
* Created on: Oct 10, 2009
* Author: fify
*/
#include <iostream>
using namespace std;
void show()
{
cout << "Shared Library." << endl;
}
编译之后将在工程目录下生成一个libshared.so文件,这就是我们要用的动态链接库文件
2. 调用动态链接库文件
(1)创建C++工程,选择Executable类型工程
(2)添加Source File,并编写源码
view plaincopy to clipboardprint?
//============================================================================
// Name : Import.cpp
// Author : Fify
// Version :
// Copyright : Fify copyleft
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
using namespace std;
void show();
int main()
{
show();
return 0;
}
//============================================================================
// Name : Import.cpp
// Author : Fify
// Version :
// Copyright : Fify copyleft
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
using namespace std;
void show();
int main()
{
show();
return 0;
}
(3)设置导入动态库
Project->Properties->C/C++ Build->Settings->Tool Settings->GCC C++ Linker->Libraries
添加Libraries (-l): shared
添加Library search path (-L): {刚才编译生成的*.so文件路径}
(4)编译该项目
3. 运行含动态链接库的程序
点击运行,会出现以下错误:error while loading shared libraries: libShared.so: cannot open shared object file: No such file or directory ,因为系统无法从默认位置找到动态链接库文件。修改系统默认搜索链接库的路径,程序即可顺利执行,输出:
Shared Library.
修改动态库搜索路径的方法有五种,参考:http://www.linuxidc.com/Linux/2009-12/23660p2.htm,这里不在详细介绍
众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及该动态库的其它资源了。在Linux 中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指定。
方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径。
可以通过编辑配置文件/etc/ld.so.conf来指定动态库的搜索路径,该文件中每行为一个动态库搜索路径。每次编辑完该文件后,都必须运行命令ldconfig使修改后的配置生效。我们通过例1来说明该方法。
例1:
我们通过以下命令用源程序pos_conf.c(见程序1)来创建动态库 libpos.so,详细创建过程请参考文[1]。
# gcc -c pos_conf.c
# gcc -shared -fPCI -o libpos.so pos_conf.o
#
#include <stdio.h>
void pos()
{
printf("/root/test/conf/lib\n");
}
程序1: pos_conf.c
接着通过以下命令编译main.c(见程序2)生成目标程序pos。
# gcc -o pos main.c -L. -lpos
#
void pos();
int main()
{
pos();
return 0;
}
程序2: main.c
然后把库文件移动到目录/root/test/conf/lib中。
# mkdir -p /root/test/conf/lib
# mv libpos.so /root/test/conf/lib
#
最后编辑配置文件/etc/ld.so.conf,在该文件中追加一行"/root/test/conf/lib"。
运行程序pos试试。
# ./pos
./pos: error while loading shared libraries: libpos.so: cannot open shared object file: No such file or directory
#
出错了,系统未找到动态库libpos.so。找找原因,原来在编辑完配置文件/etc/ld.so.conf后,没有运行命令ldconfig,所以刚才的修改还未生效。我们运行ldconfig后再试试。
# ldconfig
# ./pos /root/test/conf/lib
#
程序pos运行成功,并且打印出正确结果。
方法二:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。
通过设定环境变量LD_LIBRARY_PATH也可以指定动态库搜索路径。当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔。下面通过例2来说明本方法。
例2:
我们通过以下命令用源程序pos_env.c(见程序3)来创建动态库libpos.so。
# gcc -c pos_env.c
# gcc -shared -fPCI -o libpos.so pos_env.o
#
#include <stdio.h>
void pos()
{
printf("/root/test/env/lib\n");
}
程序3: pos_env.c
测试用的可执行文件pos可以使用例1中的得到的目标程序pos,不需要再次编译。因为pos_conf.c中的函数pos和pos_env.c中的函数pos 函数原型一致,且动态库名相同,这就好比修改动态库pos后重新创建该库一样。这也是使用动态库的优点之一。
然后把动态库libpos.so移动到目录/root/test/conf/lib中。
# mkdir -p /root/test/env/lib
# mv libpos.so /root/test/env/lib
#
我们可以使用export来设置该环境变量,在设置该环境变量后所有的命令中,该环境变量都有效。
例如:
# export LD_LIBRARY_PATH=/root/test/env/lib
#
但本文为了举例方便,使用另一种设置环境变量的方法,既在命令前加环境变量设置,该环境变量只对该命令有效,当该命令执行完成后,该环境变量就无效了。如下述命令:
# LD_LIBRARY_PATH=/root/test/env/lib ./pos /root/test/env/lib
#
程序pos运行成功,并且打印的结果是"/root/test/env/lib",正是程序pos_env.c中的函数pos的运行结果。因此程序pos搜索到的动态库是/root/test/env/lib/libpos.so。
方法三:在编译目标代码时指定该程序的动态库搜索路径。
还可以在编译目标代码时指定程序的动态库搜索路径。这是通过gcc 的参数"-Wl,-rpath,"指定(如例3所示)。当指定多个动态库搜索路径时,路径之间用冒号":"分隔。
例3:
我们通过以下命令用源程序pos.c(见程序4)来创建动态库libpos.so。
# gcc -c pos.c
# gcc -shared -fPCI -o libpos.so pos.o
#
#include <stdio.h>
void pos()
{
printf("./\n");
}
程序4: pos.c
因为我们需要在编译目标代码时指定可执行文件的动态库搜索路径,所以需要用gcc命令重新编译源程序main.c(见程序2)来生成可执行文件pos。
# gcc -o pos main.c -L. -lpos -Wl,-rpath,./
#
再运行程序pos试试。
# ./pos ./
#
程序pos运行成功,输出的结果正是pos.c中的函数pos的运行结果。因此程序pos搜索到的动态库是./libpos.so。
以上介绍了三种指定动态库搜索路径的方法,加上默认的动态库搜索路径/lib和/usr/lib,共五种动态库的搜索路径,那么它们搜索的先后顺序是什么呢?
在 介绍上述三种方法时,分别创建了动态库./libpos.so、 /root/test/env/lib/libpos.so和/root/test/conf/lib/libpos.so。我们再用源程序 pos_lib.c(见程序5)来创建动态库/lib/libpos.so,用源程序pos_usrlib.c(见程序6)来创建动态库 /usr/lib/libpos.so。
#include <stdio.h>
void pos()
{
printf("/lib\n");
}
程序5: pos_lib.c
#include <stdio.h>
void pos()
{
printf("/usr/lib\n");
}
程序6: pos_usrlib.c
这样我们得到五个动态库libpos.so,这些动态库的名字相同,且都包含相同函数原型的公用函数pos。但存储的位置不同和公用函数 pos 打印的结果不同。每个动态库中的公用函数pos都输出该动态库所存放的位置。这样我们可以通过执行例3中的可执行文件pos得到的结果不同获知其搜索到了哪个动态库,从而获得第1个动态库搜索顺序,然后删除该动态库,再执行程序pos,获得第2个动态库搜索路径,再删除第2个被搜索到的动态库,如此往复,将可得到Linux搜索动态库的先后顺序。程序pos执行的输出结果和搜索到的动态库的对应关系如表1所示:
程序pos输出结果 使用的动态库 对应的动态库搜索路径指定方式
./ ./libpos.so 编译目标代码时指定的动态库搜索路径
/root/test/env/lib /root/test/env/lib/libpos.so 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
/root/test/conf/lib /root/test/conf/lib/libpos.so 配置文件/etc/ld.so.conf中指定的动态库搜索路径
/lib /lib/libpos.so 默认的动态库搜索路径/lib
/usr/lib /usr/lib/libpos.so 默认的动态库搜索路径/usr/lib
表1: 程序pos输出结果和动态库的对应关系
创建各个动态库,并放置在相应的目录中。测试环境就准备好了。执行程序pos,并在该命令行中设置环境变量LD_LIBRARY_PATH。
# LD_LIBRARY_PATH=/root/test/env/lib ./pos ./
#
根据程序pos的输出结果可知,最先搜索的是编译目标代码时指定的动态库搜索路径。然后我们把动态库./libpos.so删除了,再运行上述命令试试。
# rm libpos.so
rm: remove regular file `libpos.so'? y
# LD_LIBRARY_PATH=/root/test/env/lib ./pos /root/test/env/lib
#
根据程序pos的输出结果可知,第2个动态库搜索的路径是环境变量LD_LIBRARY_PATH指定的。我们再把/root/test/env/lib/libpos.so删除,运行上述命令。
# rm /root/test/env/lib/libpos.so
rm: remove regular file `/root/test/env/lib/libpos.so'? y
# LD_LIBRARY_PATH=/root/test/env/lib ./pos /root/test/conf/lib
#
第3个动态库的搜索路径是配置文件/etc/ld.so.conf指定的路径。删除动态库/root/test/conf/lib/libpos.so后再运行上述命令。
# rm /root/test/conf/lib/libpos.so
rm: remove regular file `/root/test/conf/lib/libpos.so'? y
# LD_LIBRARY_PATH=/root/test/env/lib ./pos /lib
#
第4个动态库的搜索路径是默认搜索路径/lib。我们再删除动态库/lib/libpos.so,运行上述命令。
# rm /lib/libpos.so
rm: remove regular file `/lib/libpos.so'? y
# LD_LIBRARY_PATH=/root/test/env/lib ./pos /usr/lib
#
最后的动态库搜索路径是默认搜索路径/usr/lib。
综合以上结果可知,动态库的搜索路径搜索的先后顺序是:
1.编译目标代码时指定的动态库搜索路径;
2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;
4.默认的动态库搜索路径/lib;
5.默认的动态库搜索路径/usr/lib。
在上述1、2、3指定动态库搜索路径时,都可指定多个动态库搜索路径,其搜索的先后顺序是按指定路径的先后顺序搜索的。对此本文不再举例说明,有兴趣的读者可以参照本文的方法验证。
原文地址 http://www.linuxidc.com/Linux/2009-12/23660.htm
发表评论
-
vim 设置
2011-07-06 19:56 614svn checkout http://vimide.goog ... -
Linux网络编程-- 服务器模型
2010-12-30 16:34 725在网络程序里面,一般的 ... -
深度掌握NFS服务器
2010-09-30 10:48 1002对于NFS服务器,可能你 ... -
nfs速度优化
2010-09-30 10:07 15011.设置块大小 mount命令的risize和wsize指定了 ... -
shell比较小数大小
2010-09-26 14:56 17441. awk -v a=0.7 -v b=0.5 'BEGIN ... -
linux svn命令
2010-08-12 10:53 8411、Linux命令行下将文件c ... -
linux下常用压缩格式的压缩与解压方法
2010-08-10 10:50 672.tar 解包: tar xvf FileName.tar 打 ... -
GDB调试
2010-08-06 14:26 10741 GDB 命令行参数 启动 G ... -
有用的linux命令
2010-08-04 15:27 672关闭防火墙:services iptables stop 重 ... -
很有用的命令
2010-07-28 13:37 636useradd $name; echo $passwd | p ... -
两机建立信任关系
2010-07-15 15:16 7131. Setup a new directory " ... -
利用多核多线程进行程序优化
2010-07-07 14:26 770样例程序 程序功能:求 ... -
linux消息队列解析
2010-07-06 09:31 1616基本概念 1.队列 ...
相关推荐
标题 "qt eclipse 动态链接库" 暗示了我们将在Eclipse集成开发环境中讨论如何使用Qt库,特别是涉及动态链接库的方面。Qt是一个跨平台的应用程序开发框架,常用于创建图形用户界面和各种应用程序。而动态链接库(DLL...
本示例提供了在Eclipse环境中开发C++动态库(MyDll)及使用C++程序(HelloWord)调用该库的实践教程,尤其适合初学者学习。 一、动态库(.so文件)的创建 1. 首先,你需要安装必要的开发工具,如GCC编译器和Eclipse...
### Linux下使用Eclipse+Cdt进行C语言开发与调试 #### 1. 引言 在Linux平台上进行C语言开发时,传统的编辑器如Vim虽然功能强大且轻便,但在开发大型项目时效率较低。随着Linux图形界面的不断完善和发展,越来越多...
1. 库文件(.so):这是C++动态链接库,用于在运行时提供接口功能。 2. 头文件(.h/.hpp):包含了C++函数声明,供开发者在源代码中调用。 3. 示例代码:演示如何使用SDK功能的示例程序。 4. 文档:详细说明了接口...
### Linux应用程序开发环境知识点概述 #### 一、Linux操作系统简介 **1.1 Linux操作系统介绍** - **定义**: Linux是一种开源、免费传播的类UNIX操作系统。 - **开发者**: 芬兰大学生Linus Torvalds在1991年开始...
在Eclipse中创建C++项目时,你可以选择各种模板,如控制台应用、动态链接库等。Eclipse会自动生成基本的项目结构,并根据你的编译器配置(如GCC或Clang)帮助你构建和运行项目。它还支持CDT索引器,能自动分析头文件...
- 更新Linux的动态链接库配置文件`/etc/ld.so.conf.d/opencv.conf`。在这个文件中添加`/usr/local/lib`,确保系统能够找到安装的OpenCV库。 - 运行`sudo ldconfig`来更新链接器的缓存,使系统能够识别新添加的库...
7. **跨平台支持**: Eclipse IDE for C/C++ 支持多种操作系统,包括 Windows、Linux 和 macOS,确保开发环境的兼容性。 8. **性能优化**: 通过集成的性能分析工具,开发者可以识别代码中的瓶颈并进行优化,提高程序...
NDK是Google提供的一个工具集,它允许开发者在Android平台上编写C和C++的代码,然后将这些代码编译成.so文件,也就是所谓的动态链接库(Shared Library),并可以在Android应用中通过JNI(Java Native Interface)...
在Linux系统中,可以使用`ldd`命令检查可执行文件的动态链接依赖项。在Windows上,确保已安装所有必要的库文件(.dll),并将它们放在正确的路径下。 3. **环境配置问题**: 编译器和运行环境的设置也会影响程序的...
本篇笔记将详细介绍如何在Windows环境下使用Eclipse进行C++开发,并重点讲解GDAL动态链接库的配置步骤。 首先,我们需要下载并安装Eclipse的CDT(C/C++ Development Tools)插件,以及编译器MinGW。Eclipse的CDT...
5. 使用NDK的`ndk-build`命令编译C/C++代码,生成`libhello-jni.so`动态链接库。 6. 在Java代码中使用`System.loadLibrary("hello-jni")`加载原生库。 通过以上步骤,你就可以在Eclipse中进行Android NDK开发了。在...
NDK(Native Development Kit)是Android开发中的一个重要工具集,它允许开发者使用C和C++编写部分程序,将这些代码编译成.so动态链接库,然后通过Java的JNI(Java Native Interface)在Android应用中调用。...
12. **编译原生代码**:使用NDK的`ndk-build`命令编译`jni`目录下的源代码,生成`.so`动态链接库。 13. **调用JNI函数**:在Java代码中,通过`System.loadLibrary("hello-jni")`加载生成的库,然后可以使用`native`...
- **IDE集成**:虽然Linux下常用的开发环境如CLion、Eclipse或VSCode,但命令行使用`g++`也是常见方式。 3. **C++编程**: - **标准库**:掌握STL(Standard Template Library),包括容器(如vector, list, map...
- **开发工具**:推荐使用集成开发环境(IDE)如Eclipse CDT或Visual Studio Code,这些工具提供了丰富的功能支持,如代码高亮、自动补全等。 - **编译与链接**:GCC支持将源代码编译为可执行文件,同时处理依赖库的...
- 编译.so文件:运行项目根目录下的`ndk-build`脚本,生成对应的动态链接库。 - 错误处理:如果遇到"Host 'awk' tool is outdated."的错误,检查预构建目录下的awk工具版本,可能需要更新或删除。 4. **CDT和...
Eclipse 是一个功能强大的集成开发环境(IDE),最初主要用于Java编程,但随着时间的推移,它已经发展成为一个支持多种语言的平台,其中包括C和C++。"eclipse_cpp" 标题表明我们讨论的是Eclipse针对C/C++开发的特定...
此外,Linux还支持集成开发环境(IDE),如Eclipse、KDevelop等,它们集成了代码编辑、编译、调试等多种功能,极大地简化了开发流程。 通过以上内容的介绍,我们可以了解到Linux操作系统下C语言编程的基础知识,...
使用C/C++编译器编译`JNITest.c`,生成动态链接库(Windows上是`.dll`,Linux上是`.so`,Mac上是`.dylib`)。 7. **将库与Java项目关联** 将生成的库文件放在Java项目的`lib`目录下,并在eclipse的项目属性中配置...