Eclipse CDT动态库Shared Library配置与使用,解决找不到.so的问题

本文介绍如何在Eclipse环境中编译并调用动态库,避免配置环境变量,通过设置环境变量LD_LIBRARY_PATH、使用ld's rpath选项、在工程属性中添加链接标志或软连接方式,实现库文件在Eclipse和终端中无缝调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于建立Shared Library,其实很简单,就是建立工程的时候选择Shared Library。
想必很多朋友都希望在eclipse中编译好动态库以后能在我们的程序中直接调用,并且不需要在调用程序(这里以test为例,库工程名为mylib)中去配置环境变量LD_LIBRARY_PATH,或者在gcc编译时指定路径名(该方法也不错,很适用较少库文件的引用)

   -R${workspace_loc:/mylib/Debug}

    调用我们编译好的库有两步:

    1.增加包含目录,在workspace中将需要的库包含进来

Eclipse <wbr>CDT动态库Shared <wbr>Library配置与使用,解决找不到.so的问题

   2.添加动态库名和库的路径

Eclipse <wbr>CDT动态库Shared <wbr>Library配置与使用,解决找不到.so的问题

    现在说下环境变量,使用LD_LIBRARY_PATH变量,选中project右键 -> run as -> run configuration -> Environment,add一个,name为LD_LIBRARY_PATH,value为${workspace_loc:/mylib/Debug},

Eclipse <wbr>CDT动态库Shared <wbr>Library配置与使用,解决找不到.so的问题

    这样程序能在eclipse中运行了,但我们想到终端运行却还是"error while loading shared libraries:...",要在终端运行,需要设置该坏境变量(#export LD_LIBRARY_PATH=/root/workspace/mylib/Debug/),很是不爽。

    方法二:先看一段英文:
     One link option you might use is ld's ``rpath'' option, which specifies the runtime library search path of that particular program being compiled. From gcc, you can invoke the rpath option by specifying it this way:
-Wl,-rpath,$(DEFAULT_LIB_INSTALL_PATH)
If you use this option when building the library client program, you don't need to bother with LD_LIBRARY_PATH (described next) other than to ensure it's not conflicting, or using other techniques to hide the library.

    所以我们可以在test中设置中加入一段,即工程Property -> C/C++ build -> settings -> GCC C Linker-> Miscellaneous -> Link flags 中添加-Wl,-rpath=/root/workspace/mylib/Debug,可完美编译哦...

    另外一种让人比较满意的方法三:在工程Property -> C/C++ build -> settings -> GCC C Linker-> Miscellaneous -> other option 中添加

-R"${workspace_loc:/mylib/Debug}" 

Eclipse <wbr>CDT动态库Shared <wbr>Library配置与使用,解决找不到.so的问题

    该方法很不错。是编译阶段做好连接工作,而且可在终端执行(./test)

     我使用的方法四:主要是通过配置文件做好一些准备工作后,直接引用lib*.so文件
由于Linux动态库的默认搜索路径是/lib和/usr/lib64等类似的目录,如果在这些地方找不到会按照配置文件/etc/ld.so.conf中指定的目录查找,所以我们可以在/etc/ld.so.conf.d目录下创建*.conf(如workspace.conf)配置文件,用来指定我们希望被查找到的lib*.so,如往里写入/root/lib,随自己喜欢,方便管理就好。

     在程序运行时,此目录便会被搜寻,我们可以将build好的lib*.so软连接到此,
#cd /root/lib/,
#ln -s /root/workspace/mylib/Debug/libmylib.so .
#ldconfig
     这样设置好以后,可以很方便的管理,更重要的是我们再次调用库时就像调用系统的库一样,直接使用,不需要再去针对每一个调用程序做配置,感觉最爽对很多完美主义的朋友是很重要的。 
#cd /root/workspace/test/Debug/
#ldd test
<think>嗯,用户想在Windows环境下用Eclipse C/C++创建C程序并生成.so文件。首先,我需要回忆一下相关的步骤。记得Eclipse需要安装C/C++开发插件,也就是CDT。可能还需要编译器,比如MinGW或者Cygwin。但生成.so文件通常是Linux的动态库,在Windows上应该是.dll,不过用户可能想用Cygwin模拟Linux环境来生成.so。 首先,用户需要安装Eclipse IDE for C/C++ Developers,或者安装Eclipse Classic然后添加CDT插件。参考引用[2]提到了需要Eclipse Classic加上Cygwin、CDT和NDK。不过用户的问题里没有提到Android,所以可能不需要NDK。不过生成.so的话,可能需要配置编译器为gcc,并使用-shared选项。 接下来,安装Cygwin,确保安装了gcc-core、gcc-g++、make和binutils这些包,这样才有编译器工具链。然后,在Eclipse配置Cygwin的路径,比如设置环境变量或者在Eclipse的Preferences里添加工具链路径。 创建项目时,要选择C项目,然后选择Shared Library类型,这样生成的项目会自动配置生成.so文件。用户需要编写代码,比如一个简单的函数,然后在项目属性里检查编译命令是否包含-fPIC和-shared选项。可能还需要在链接器设置里添加这些参数。 编译后,生成的.so文件应该在项目的Debug或Release目录下。用户可能还需要配置构建命令,比如使用makefile,但Eclipse通常会自动生成这些配置。另外,要注意Windows下使用Cygwin路径的问题,可能需要正确设置PATH环境变量,确保运行时能到依赖的库。 用户可能遇到的问题包括编译器路径配置错误,或者缺少必要的库。需要检查Eclipse中的编译器设置,确保指向Cygwin的gcc。另外,如果代码中有平台特定的函数,可能需要修改代码以兼容Windows下的Cygwin环境。 最后,测试生成的.so文件是否可用,可能需要编写一个测试程序,并配置运行时环境来加载.so。不过Windows下通常用.dll,用户可能需要确认是否真的需要.so,或者是否可以使用MinGW生成.dll文件,这可能更简单。但根据引用[2]和引用[4],使用Cygwin可以生成.so,所以按照步骤操作应该可行。</think>### 在Windows环境下使用Eclipse C/C++创建C程序并编译生成.so文件 #### **步骤1:安装必要工具** 1. **安装Eclipse IDE for C/C++ Developers** 下载并安装Eclipse IDE的C/C++版本[^1],或通过Eclipse Classic安装CDT插件(C/C++ Development Tooling)[^2]。 2. **安装Cygwin或MinGW** - **Cygwin**:提供类Linux环境,支持生成.so文件。安装时需包含`gcc-core`、`gcc-g++`、`make`、`binutils`包[^2][^3]。 - **MinGW**:生成Windows原生DLL文件,若需.so文件需结合Cygwin环境[^4]。 3. **配置环境变量** 将Cygwin的`bin`目录(如`C:\cygwin64\bin`)添加到系统PATH变量,确保终端可调用`gcc`。 --- #### **步骤2:创建C项目** 1. 打开Eclipse,选择 **File → New → C Project**。 2. 输入项目名称,选择 **Project type → Shared Library**,工具链选择 **Cygwin GCC** 或 **MinGW GCC**(根据安装环境)[^2]。 3. 完成创建后,编写C代码(示例): ```c // example.c #include <stdio.h> void hello() { printf("Hello from shared library!\n"); } ``` --- #### **步骤3:配置编译选项** 1. **右键项目 → Properties → C/C++ Build → Settings**。 2. **GCC C Compiler → Miscellaneous**:添加编译选项 `-fPIC`(生成位置无关代码)。 3. **GCC C Linker → Shared Library Settings**: - **Library name**:输入`example`(生成`libexample.so`)。 - **Miscellaneous**:添加选项 `-shared`[^3]。 --- #### **步骤4:编译生成.so文件** 1. 点击 **Project → Build Project**,生成文件位于`项目目录/Debug`或`项目目录/Release`下。 2. 若报错“未到gcc”,检查Cygwin/MinGW路径配置(**Window → Preferences → C/C++ → Build → Environment**)[^4]。 --- #### **验证生成结果** 在Cygwin终端中检查文件类型: ```bash file libexample.so ``` 输出应为: `libexample.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped` --- ### **关键问题解决** 1. **编译失败:缺少依赖** 确保Cygwin安装了所有开发包(`gcc-core`、`make`等)。 2. **无法生成ELF格式文件** 使用Cygwin的`gcc`而非MinGW,因MinGW默认生成PE格式(Windows可执行文件)[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值