【发布时间】:2016-04-08 04:25:21
【问题描述】:
您好 Stack Overflow 的好人,我又带着问题回来了!哈哈
所以我有几个文件要编译并链接在一起。我创建的库是一个 DLL。使用RTLD_LAZY 方法。我的库与应用程序位于同一目录中。我很难完成这项任务。我正在尝试使用-ldl 链接它。
我拥有的文件是:
lab3.c //Which has my main
myLibrary.c //which is my library
sdv.h //which is my header file
testDynamic.c //which is my handle file for the RTLD_LAZY
这是我到目前为止所做的,但我显然搞砸了..
dynamic: lab3.o myLibrary.o test
gcc -o dynamic lab3.o myLibrary.o -lm
lab3.o: lab3.c
gcc -fPIC -c -o lab3.o lab3.c -lm
myLibrary.o: myLibrary.c
gcc -fPIC -c myLibrary.c -o myLibrary.o -lm
libmyLibrary.so: myLibrary.o
gcc -shared -o libmyLibrary.so myLibrary.o -lm
testDynamic.o:
gcc testDynamic.c -L. -lmyLibrary -o test -ldl
export LD_LIBRARY_PATH=./
任何建议将不胜感激!提前致谢!
【问题讨论】:
-
能否给出错误信息和 testDynamic 的最小来源?
-
"我创建的库是一个 DLL" "libmyLibrary.so",这在我看来有点混乱,一个 DLL 给我的印象是你在 windows 上使用的,但是 .so 文件是动态库对于 UNIX,那么您的操作系统到底是什么?
-
我得到的错误是“加载共享库时出错:libmyLibrary.so:无法打开共享对象文件:没有这样的文件或目录@dvhh
-
@dvhh 对于我的句柄细节.....int main(){ void *handle;字符 * 错误;无效(*sphere_d)(浮动,浮动*,浮动*);浮动(*volCylinder_d)(浮动,浮动); float(*sumFloats_d)(float [], int);双(*正弦_d)(浮点数);句柄 = dlopen("libmyLibrary.so", RTLD_LAZY); if(handle == (void *)0){ fputs(dlerror(), stderr);退出(-1); } sphere_d = dlsym(句柄,“球体”);错误 = dlerror();如果(错误!= NULL){ fputs(错误,标准错误);退出(-1); } volCylinder_d = dlsym(句柄,“volCylinder”);错误 = dlerror();如果(错误!= NULL){
-
我正在使用 Fedora!抱歉,我认为 DLL 是动态链接库的常用缩写。它是一个 .so 文件。 @jdarthenay
标签: c dynamic makefile shared-libraries gnu-make