- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试编译使用 libdl 库中的 API 的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int
main(int argc, char **argv)
{
void *handle;
double (*cosine)(double);
char *error;
handle = dlopen("libm.so", RTLD_LAZY);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
exit(EXIT_FAILURE);
}
dlerror(); /* Clear any existing error */
/* Writing: cosine = (double (*)(double)) dlsym(handle, "cos");
would seem more natural, but the C99 standard leaves
casting from "void *" to a function pointer undefined.
The assignment used below is the POSIX.1-2003 (Technical
Corrigendum 1) workaround; see the Rationale for the
POSIX specification of dlsym(). */
*(void **) (&cosine) = dlsym(handle, "cos");
if ((error = dlerror()) != NULL) {
fprintf(stderr, "%s\n", error);
exit(EXIT_FAILURE);
}
printf("%f\n", (*cosine)(2.0));
dlclose(handle);
exit(EXIT_SUCCESS);
}
我使用以下命令进行编译:--> gcc -static -o foo foo.c -ldl
我收到以下错误:
foo.c:(.text+0x1a): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
google了一下,因为我是静态编译的,所以在lib目录下可以找到libdl.a。我也遇到了与 gethostbyname API 相同的问题。静态编译 dl_open 需要添加哪些其他库。
最佳答案
一个可能的问题:
dlsym()
应该在 它被 main() 引用之前声明或实现。
关于c - 如何使用静态库 libdl.a 编译程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36472442/
我一直在尝试将 linux 编译的预构建共享库与我的 android jni 应用程序一起使用,但是当我尝试运行该应用程序时,出现以下错误: 04-16 19:09:13.633: E/dalvikv
我正在尝试编译使用 libdl 库中的 API 的示例代码: #include #include #include int main(int argc, char **argv) { v
我想在 MinGW 中生成一个 dll 文件,为了做到这一点,我有几个对象依赖项,我的对象依赖项之一是 libdl.so,我在 unix 中简单地添加了这个对象: g++ xx.o yy.o /usr
请阐明调用这两者的区别,并建议我哪个在性能和效率方面更好。 handle = dlopen("libxx.so", RTLD_GLOBAL| RTLD_NOW); dlsym(handle, "fun
libdl 和 libltdl 有什么区别? 。我刚刚注意到 libodbc 链接到它们 ldd /usr/lib/x86_64-linux-gnu/libodbc.so.2 | grep -i dl
假设您有一个基于插件架构的应用程序,其中每个插件都是一个 *.so 文件,该文件使用 dlopen() 动态加载。 主应用程序可以通过dlsym() 引用符号,因此它可以调用插件的函数。插件如何调用主
我对Mac非常陌生,并尝试编译一些链接到libdl.so的代码。 我使用CMake配置项目,并且在CMakeList中具有: IF(UNIX) FIND_LIBRARY(LIBDL_L
我正在尝试从 Julia v0.6.2、Windows 10 调用 C 代码。 这是我用 Cygwin 编译成 DLL 的 C 代码海合会。 int timesTwo(int x) { ret
我在 CentOS 上使用黄金链接器链接 Intel MKL 和 libdl 时遇到问题: 当我运行这个脚本时: #!/bin/bash MKL_INC=$MKL_INSTALL_DIR/includ
我一直在玩弄,用 C 语言编写了一个小型 IRC 框架,现在我将使用一些核心功能对其进行扩展 - 但除此之外,我希望它可以通过插件进行扩展! 直到现在,每当我写一些 IRC 相关的东西(我写了很多,现
如果 gcc 编译的程序正在调用 dlopen,则必须在启用 -ldl 选项的情况下进行编译。这意味着这样的程序在运行时依赖库 libdl.so。事实上,通过对其执行 ldd,我们看到了这一行: li
由于 dlopen 使用 libdl.so ,但我正在开发不使用操作系统支持的独立应用程序,所以我的想法是直接使用编码实现 dlopen 有没有 最佳答案 加载共享库本质上依赖于操作系统系统的运行时加
我正在编写一个小项目,我想在其中调用共享库中的函数。为此,我想使用 libdl.so 的 dlopen() 函数。 我已设置好所有内容,因此当我将其作为 64 位应用程序构建和运行时它可以正常工作。但
我正在尝试为 Matrix Vision 销售的 USB 相机 (mvBlueFOX) 编译示例应用程序。他们为我提供了应用程序的源代码、一个 make 文件和一组预编译的共享库。但是,生成文件无法成
我只是在我的 FreeBsd mashine 上安装了 rabbitmq-3.7.8。 但是如果我跑 rabbitmqctl start ,然后得到错误是 找不到共享对象“libdl.so.1”,“b
我正在尝试在我的 c 程序中使用一些 cos/sin 函数和 dlopen/sym 函数,并将其包含在我的“BUILD”文件中: cc_binary( name = "hello-dl",
我使用的是 Ubuntu 14.04 我尝试使用 https://github.com/KDE/heaptrack用于检测正在运行的 C++ 程序中的内存泄漏 heaptrack shell脚本运行时
在 Android 6 之前,我们有一个应用程序的工作版本,它是使用 Qt Android 编写的,从 Android 6 开始,我们在 Nexus 设备中看到了奇怪的错误 dlopen 失败:无法找
我正在 CLion 中测试一个简单的问题,但被难住了:看来我无法在基本的 hello world 案例中包含使用 dlopen 的功能: #include #include using names
我想将一个二进制 linux 编译成完全静态的,但我总是用这个配置失败: CFLAGS="--static" CPPFLAGS="-I/home/alan/arm/arm-none-linux-gnu
我是一名优秀的程序员,十分优秀!