- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
环境:gcc 版本 4.4.1(Ubuntu 4.4.1-4ubuntu9)
app: Bin(main)调用动态库(testb.so),testb.so包含一个静态库(libtesta.a)。
文件列表:主程序测试.h交流电公元前
然后编译为:
gcc -o testa.o -c a.c
ar -r libtesta.a testa.o
gcc -shared -fPIC -o testb.so b.c
gcc -o main main.c -L. -ltesta -ldl
然后编译成功,但是运行报错:
./main: symbol lookup error: ./testb.so: undefined symbol: print
代码如下:
测试.h
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <dlfcn.h>
int printa(const char *msg);
int printb(const char *msg);
交流
#include "test.h"
int
printa(const char *msg)
{
printf("\tin printa\n");
printf("\t%s\n", msg);
}
公元前
#include "test.h"
int
printb(const char *msg)
{
printf("in printb\n");
printa("called by printb\n");
printf("%s\n", msg);
}
主.c
#include "test.h"
int
main(int argc, char **argv)
{
void *handle;
int (*dfn)(const char *);
printf("before dlopen\n");
handle = dlopen("./testb.so", RTLD_LOCAL | RTLD_LAZY);
printf("after dlopen\n");
if (handle == NULL) {
printf("dlopen fail: [%d][%s][%s]\n", \
errno, strerror(errno), dlerror());
exit(EXIT_FAILURE);
}
printf("before dlsym\n");
dfn = dlsym(handle, "printb");
printf("after dlsym\n");
if (dfn == NULL) {
printf("dlsym fail: [%d][%s][%s]\n", \
errno, strerror(errno), dlerror());
exit(EXIT_FAILURE);
}
printf("before dfn\n");
dfn("printb func\n");
printf("after dfn\n");
exit(EXIT_SUCCESS);
}
最佳答案
如果我在编译静态文件时将 -fPIC 添加到 gcc,那么它运行良好。
关于c - 动态库找不到静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2635601/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!