建立库pgm时发出Clang未定义符号

问题描述

所以我试图用“ --with-pgm标签编译一个支持pgm的iOS ZeroMQ库。我当前正在使用此script,只需克隆存储库并运行ruby脚本即可运行。如果查看shell文件,您会看到我已经定义了三种体系结构(arm7,arm7s,arm64),并且已经将pgm标记(--with--pgm添加到\ configure中。

现在,如果我尝试编译不带pgm标签的库,我将完全能够并且一切正常。

但是,如果我尝试使用pgm标签编译该库,则会得到以下错误列表:

(请注意,在此列表之前,使用brew安装的libpgm出现了结构重新声明的错误,我通过注释掉库中的结构来修复了该结构)

Undefined symbols for architecture armv7:
  "_pgm_bind3",referenced from:
      zmq::pgm_socket_t::init(bool,char const*) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_close",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::~pgm_socket_t() in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_connect",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_error_free",referenced from:
      _zmq_ctx_new in libzmq.a(libzmq_la-zmq.o)
      zmq::pgm_socket_t::init_address(char const*,pgm_addrinfo_t**,unsigned short*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::init(bool,char const*) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_free",referenced from:
      zmq::pgm_socket_t::receive(void**,pgm_tsi_t const**) in libzmq.a(libzmq_la-pgm_socket.o)
Undefined symbols for architecture armv7:
  "_pgm_bind3",pgm_tsi_t const**) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_freeaddrinfo",referenced from:
      zmq::socket_base_t::connect(char const*) in libzmq.a(libzmq_la-socket_base.o)
      zmq::pgm_socket_t::init(bool,char const*) in libzmq.a(libzmq_la-pgm_socket.o)
Undefined symbols for architecture armv7:
  "_pgm_bind3",referenced from:
  "_pgm_getaddrinfo",referenced from:
      zmq::pgm_socket_t::init_address(char const*,char const*) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_getsockopt",referenced from:
      zmq::pgm_socket_t::get_max_tsdu_size() in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_receiver_fds(int*,int*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_sender_fds(int*,int*,int*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_rx_timeout() in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_close",referenced from:
      zmq::pgm_socket_t::get_tx_timeout() in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::init(bool,char const*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::~pgm_socket_t() in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_gsi_create_from_data",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_connect",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_init",referenced from:
      _zmq_ctx_new in libzmq.a(libzmq_la-zmq.o)
  "_pgm_error_free",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_recvmsgv",pgm_tsi_t const**) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::process_upstream() in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_free",pgm_tsi_t const**) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_send",referenced from:
      zmq::pgm_socket_t::send(unsigned char*,unsigned long) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_freeaddrinfo",referenced from:
      zmq::socket_base_t::connect(char const*) in libzmq.a(libzmq_la-socket_base.o)
  "_pgm_setsockopt",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::init(bool,char const*) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_shutdown",referenced from:
      _zmq_ctx_term in libzmq.a(libzmq_la-zmq.o)
  "_pgm_socket",referenced from:
Undefined symbols for architecture armv7:
  "_pgm_bind3",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::init_address(char const*,unsigned short*) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_getsockopt",int*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_rx_timeout() in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_tx_timeout() in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_freeaddrinfo",referenced from:
  "_pgm_close",referenced from:
  "_pgm_gsi_create_from_data",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::~pgm_socket_t() in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::socket_base_t::connect(char const*) in libzmq.a(libzmq_la-socket_base.o)
  "_pgm_init",referenced from:
      _zmq_ctx_new in libzmq.a(libzmq_la-zmq.o)
  "_pgm_recvmsgv",referenced from:
  "_pgm_connect",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
Undefined symbols for architecture armv7:
      zmq::pgm_socket_t::receive(void**,referenced from:
  "_pgm_bind3",pgm_tsi_t const**) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::init(bool,char const*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::~pgm_socket_t() in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_freeaddrinfo",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_send",referenced from:
  "_pgm_error_free",unsigned short*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::init_address(char const*,referenced from:
      _zmq_ctx_new in libzmq.a(libzmq_la-zmq.o)
  "_pgm_getsockopt",int*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_rx_timeout() in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_tx_timeout() in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::init_address(char const*,char const*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::send(unsigned char*,unsigned long) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_getaddrinfo",int*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_rx_timeout() in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_tx_timeout() in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_setsockopt",pgm_tsi_t const**) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_init",referenced from:
      _zmq_ctx_new in libzmq.a(libzmq_la-zmq.o)
      zmq::pgm_socket_t::init(bool,pgm_tsi_t const**) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::process_upstream() in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_send",referenced from:
  "_pgm_freeaddrinfo",unsigned long) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::socket_base_t::connect(char const*) in libzmq.a(libzmq_la-socket_base.o)
      zmq::pgm_socket_t::init(bool,char const*) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_setsockopt",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::~pgm_socket_t() in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_shutdown",referenced from:
      _zmq_ctx_term in libzmq.a(libzmq_la-zmq.o)
  "_pgm_connect",referenced from:
  "_pgm_socket",referenced from:
  "_pgm_free",referenced from:
      _zmq_ctx_term in libzmq.a(libzmq_la-zmq.o)
      zmq::pgm_socket_t::receive(void**,char const*) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_getaddrinfo",unsigned short*) in libzmq.a(libzmq_la-pgm_socket.o)
ld: symbol(s) not found for architecture armv7
  "_pgm_getsockopt",int*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_rx_timeout() in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_tx_timeout() in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_socket",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_gsi_create_from_data",unsigned short*) in libzmq.a(libzmq_la-pgm_socket.o)
      _zmq_ctx_new in libzmq.a(libzmq_la-zmq.o)
clang: error: linker command Failed with exit code 1 (use -v to see invocation)
  "_pgm_getsockopt",referenced from:
  "_pgm_recvmsgv",pgm_tsi_t const**) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_max_tsdu_size() in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::process_upstream() in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_receiver_fds(int*,int*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_rx_timeout() in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_tx_timeout() in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_send",unsigned long) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_setsockopt",referenced from:
ld: symbol(s) not found for architecture armv7
  "_pgm_freeaddrinfo",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
clang: error: linker command Failed with exit code 1 (use -v to see invocation)
      zmq::pgm_socket_t::receive(void**,referenced from:
      _zmq_ctx_term in libzmq.a(libzmq_la-zmq.o)
  "_pgm_getaddrinfo",int*) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_rx_timeout() in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::get_tx_timeout() in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_init",referenced from:
make[1]: *** [remote_thr] Error 1
make[1]: *** Waiting for unfinished jobs....
      _zmq_ctx_new in libzmq.a(libzmq_la-zmq.o)
  "_pgm_gsi_create_from_data",referenced from:
      _zmq_ctx_new in libzmq.a(libzmq_la-zmq.o)
  "_pgm_socket",pgm_tsi_t const**) in libzmq.a(libzmq_la-pgm_socket.o)
make[1]: *** [local_lat] Error 1
      zmq::pgm_socket_t::process_upstream() in libzmq.a(libzmq_la-pgm_socket.o)
ld: symbol(s) not found for architecture armv7
  "_pgm_recvmsgv",unsigned long) in libzmq.a(libzmq_la-pgm_socket.o)
ld: symbol(s) not found for architecture armv7
  "_pgm_send",referenced from:
  "_pgm_setsockopt",unsigned long) in libzmq.a(libzmq_la-pgm_socket.o)
      zmq::pgm_socket_t::init(bool,char const*) in libzmq.a(libzmq_la-pgm_socket.o)
clang: error: linker command Failed with exit code 1 (use -v to see invocation)
  "_pgm_shutdown",referenced from:
      _zmq_ctx_term in libzmq.a(libzmq_la-zmq.o)
  "_pgm_setsockopt",referenced from:
clang: error: linker command Failed with exit code 1 (use -v to see invocation)
      _zmq_ctx_term in libzmq.a(libzmq_la-zmq.o)
  "_pgm_socket",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
  "_pgm_socket",char const*) in libzmq.a(libzmq_la-pgm_socket.o)
ld: symbol(s) not found for architecture armv7
make[1]: *** [inproc_lat] Error 1
ld: symbol(s) not found for architecture armv7
make[1]: *** [remote_lat] Error 1
clang: error: linker command Failed with exit code 1 (use -v to see invocation)
clang: error: linker command Failed with exit code 1 (use -v to see invocation)
ld: symbol(s) not found for architecture armv7
make[1]: *** [local_thr] Error 1
make[1]: *** [curve_keygen] Error 1
clang: error: linker command Failed with exit code 1 (use -v to see invocation)
make[1]: *** [inproc_thr] Error 1
make: *** [all-recursive] Error 1

据我所知,clang告诉我zmq库期望存在未定义的pgm内容。目前,在我的计算机上,我安装了libzmq和libpgm,以便在需要时使用Python运行ZeroMQ和pgm

我看过这个Stack Overflow article时遇到了同样的问题,但是我认为不必在运行时查找符号就可以解决我的问题。

我还发现此article更针对libpgm和ZeroMQ进行了量身定制,但它表示要将Openpgm库依赖项添加到构建中,我不确定如何使用shell脚本。

我不知道如何从这里开始,但是据我所知,添加Openpgm库可能是我最好的选择。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)