AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 516936
Accepted
DrP3pp3r
DrP3pp3r
Asked: 2019-05-04 03:48:12 +0800 CST2019-05-04 03:48:12 +0800 CST 2019-05-04 03:48:12 +0800 CST

unixODBC:无法加载 libmaodbc.so

  • 772

我正在一个嵌入式平台上工作,我正在尝试通过 unixODBC 访问 MariaDB。尝试测试与 isql 的连接我得到了响应:

isql -v mydsn myuser mypw
[01000][unixODBC][Driver Manager]Can't open lib '/usr/lib/libmaodbc.so' : file not found

文件 /usr/lib/libmaodbc.so 存在:

ls -la /usr/lib/libmaodbc.so
-r-xr-xr-x    1 root     root        403952 Sep  1 00:00 /usr/lib/libmaodbc.so

所以我认为必须缺少依赖项。

readelf -d /usr/lib/libmaodbc.so 

Dynamic section at offset 0x4fb54 contains 30 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libodbcinst.so.2]
 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 0x00000001 (NEEDED)                     Shared library: [ld-linux-armhf.so.3]
 0x0000000e (SONAME)                     Library soname: [libmaodbc.so]
[...]

我重复了检查 - 所有四个依赖项都存在。

接下来我编写了一个测试程序,它尝试加载共享对象:

#include <iostream>
#include <dlfcn.h>

void tryLoadSo(const std::string& path) {
    void* so = dlopen(path.c_str(), RTLD_NOW);
    if(so) {
        std::cout << "Loaded " << path << "!" << std::endl;
        dlclose(so);
    } else {
        std::cout << "Failed to load " << path << "!" << std::endl;
    }
}

int main() {
    tryLoadSo("/usr/lib/libmaodbc.so");
    tryLoadSo("/usr/lib/libodbcinst.so.2");
    tryLoadSo("/usr/lib/libm.so.6");
    tryLoadSo("/usr/lib/libc.so.6");
    tryLoadSo("/usr/lib/ld-linux-armhf.so.3");
}

输出:

Failed to load /usr/lib/libmaodbc.so!
Loaded /usr/lib/libodbcinst.so.2!
Loaded /usr/lib/libm.so.6!
Loaded /usr/lib/libc.so.6!
Loaded /usr/lib/ld-linux-armhf.so.3!

因此可以加载所有依赖项,但 libmaodbc 不能。

共享对象是否未针对正确的平台进行配置?是的。我将它与 libodbcinst.so.2 进行了比较,以确保:

readelf -h /usr/lib/libmaodbc.so 
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x9a58
  Start of program headers:          52 (bytes into file)
  Start of section headers:          402952 (bytes into file)
  Flags:                             0x5000400, Version5 EABI, hard-float ABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         7
  Size of section headers:           40 (bytes)
  Number of section headers:         25
  Section header string table index: 24

readelf -h /usr/lib/libodbcinst.so.2
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x1e60
  Start of program headers:          52 (bytes into file)
  Start of section headers:          53528 (bytes into file)
  Flags:                             0x5000400, Version5 EABI, hard-float ABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         6
  Size of section headers:           40 (bytes)
  Number of section headers:         24
  Section header string table index: 23

可能出了什么问题?为什么 libmaodbc.so 不会加载?

linux arm
  • 1 1 个回答
  • 1627 Views

1 个回答

  • Voted
  1. Best Answer
    DrP3pp3r
    2019-05-07T04:42:35+08:002019-05-07T04:42:35+08:00

    libmaodbc.so 与 libmariadb.so.3 静态链接。现在我动态链接了 libmariadb.so.3 并且它起作用了。

    不知道是否链接了错误/不匹配的库或其他一些链接设置不正确(可能在 CMakeLists.txt 中出现问题?)。所以我仍然不明白根本原因。但是症状是固定的。

    • 0

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve