我有两个文件:
lib.c
#include<stdio.h>
void hi() {
printf("Hi i'm a library function in lib.so\n");
}
和main.c中
#include<stdio.h>
#include<dlfcn.h>
/* based on Jeff Scudder's code */
int main() {
void *SharedObjectFile;
void (*hi)();
// Load the shared libary;
SharedObjectFile = dlopen("./lib.so", RTLD_LAZY);
// Obtain the address of a function in the shared library.
ciao = dlsym(SharedObjectFile, "hi");
// Use the dynamically loaded function.
(*hi)();
dlclose(SharedObjectFile);
}
我已经试过用下面的命令来建立一个可执行文件:
出口LD_LIBRARY_PATH =
pwd
GCC -c -fpic lib.c
GCC -shared -lc -o lib.so lib.o
GCC的main.c -ldl
它工作得很好。 然后我试着用下面的命令导出在Android上我的节目(的Nexus One,采用ARM-v7-0a弓):
出口LD_LIBRARY_PATH =
pwd
手臂-NONE-Linux的gnueabi-GCC -c -fpic lib.c
手臂-NONE-Linux的gnueabi-GCC -shared -lc -o lib.so lib.o
臂无-Linux的gnueabi-GCC的main.c -ldl -o主
ADB推主/系统/应用程序
在智能手机上正确的文件夹执行./main的结果就是:
./main:未找到
即使我的文件就在那里!
我错过了在交叉编译过程什么? 任何帮助吗? 我使用CodeSourcery的交叉编译器,它可以很好地用于没有。所以图书馆的静态程序。 谢谢
编辑 :作为伊戈尔下面指出,这是一个连接问题。 此命令修复它:
臂-NONE-Linux的gnueabi-GCC -o测试的main.c -Wl, - 动态接头= /系统/ bin中/接头-ldl
在我的非常情况下,我需要其他库,因为在/系统/ lib中/有没有很多.so文件。