【问题标题】:GCC not linking RHash?GCC没有链接RHash?
【发布时间】:2018-08-07 12:53:41
【问题描述】:

我在我的测试环境中有这个工作,但我想我无法弄清楚我是如何做到的。基本上,我正在尝试编译一个使用 RHash 函数的 MySQL UDF,但我是从 MySQL 服务器获取的

错误代码:1126。无法打开共享库“sha3.so”(错误号:0 /usr/lib/mysql/plugin/sha3.so:未定义符号:rhash_msg)

在我运行这些的服务器上

apt install rhash librhash-dev

我什至从https://github.com/rhash/RHash 下载了源代码(只是因为它还没有工作)并运行

./configure
make test
make install

这似乎没有给我任何错误,然后我用

编译
gcc -I/usr/include/mysql -lrhash -o sha3.so -shared sha3.c -fPIC

这也没有给出任何错误,但是在运行时我得到了那个 MySQL 错误

create function`sha3`returns string soname'sha3.so';

我在这里做错了什么?

以防万一,我的来源在这里https://gist.github.com/BrianLeishman/a0f40e7a0a87a7069c5c56a768ff3179


我已经看到这个答案What is an undefined reference/unresolved external symbol error and how do I fix it?,但我很确定我已经正确设置了参数的顺序,但也许我错了,因为他们所有的例子都谈到在链接之前设置输出,这绝对不是我在这里所做的。

【问题讨论】:

  • @MikeKinghan 我已经阅读了此页面上的答案,老实说,我完全不确定如何应用它们,也许我无法理解我正在阅读的内容
  • 嗨。我链接到的那个涵盖了你的情况。在引用它的目标文件sha3.o 之前的链接序列中有-lrhash,它将与sha3.c 处于相同的相对位置(因为您将编译和链接滚动到一个命令中)。将-lrhash 移动到sha3.c 之后的任意位置。
  • @MikeKinghan 啊,好吧,现在说得通了,那个链接答案的底部听起来好像是在声明做与此完全相反的事情,但将它移到右边肯定解决了这个问题。我怀疑它在我的测试中有效,因为它是 Debian 并且是 Ubuntu

标签: mysql gcc mysql-udf


【解决方案1】:

对于刚开始使用 GCC 和 C/C++ 的人来说,建议的问题可能有点过于技术性了,所以虽然它在技术上可能是重复的,但我希望这个问题/答案留在这里和我在同一个地方的人。

基本上,某些版本的linux编译的步骤彼此不同,所以

gcc -I/usr/include/mysql -lrhash -o sha3.so -shared sha3.c -fPIC

可能会根据操作系统和版本工作,但要确保这适用于所有内容,请将 -lrhash 移动到 sha3.c 之后(在这种情况下)

gcc -I/usr/include/mysql -o sha3.so -shared sha3.c -lrhash -fPIC

【讨论】:

    猜你喜欢
    • 2018-08-20
    • 2011-08-06
    • 2023-03-30
    • 2012-03-21
    • 1970-01-01
    • 2014-05-14
    • 2010-11-03
    • 2018-05-21
    • 1970-01-01
    相关资源
    最近更新 更多