Skip to content

undefined reference in mingw when link static library. #3318

@o-u-p

Description

@o-u-p

Please use this template for reporting suspected bugs or requests for help.

Issue description

I'm trying to compile a static libzmq.a in windows using mingw, I tried both the configure and Makefile.mingw32 file and got libzmq.a, but neither woked, here is the output:

../../../lib/libuc_protocol.a(context.cpp.obj):context.cpp:(.text+0x3c7):
undefined reference to `__imp_zmq_ctx_term'

../../../lib/libuc_protocol.a(context.cpp.obj):context.cpp:(.text+0xa03): undefined reference to __imp_zmq_ctx_new' ../../../lib/libuc_protocol.a(poller.cpp.obj):poller.cpp:(.text+0x682): undefined reference to __imp_zmq_poll' ../../../lib/libuc_protocol.a(socket.cpp.obj):socket.cpp:(.text+0x368): undefined reference to __imp_zmq_bind' ../../../lib/libuc_protocol.a(socket.cpp.obj):socket.cpp:(.text+0x408): undefined reference to __imp_zmq_connect' ../../../lib/libuc_protocol.a(socket.cpp.obj):socket.cpp:(.text+0x49a): undefined reference to __imp_zmq_setsockopt' ../../../lib/libuc_protocol.a(socket.cpp.obj):socket.cpp:(.text+0x4cb): undefined reference to __imp_zmq_setsockopt' ../../../lib/libuc_protocol.a(socket.cpp.obj):socket.cpp:(.text+0x500): undefined reference to __imp_zmq_setsockopt' ../../../lib/libuc_protocol.a(socket.cpp.obj):socket.cpp:(.text+0x532): undefined reference to __imp_zmq_setsockopt' ../../../lib/libuc_protocol.a(socket.cpp.obj):socket.cpp:(.text+0x5a3): undefined reference to __imp_zmq_setsockopt' ../../../lib/libuc_protocol.a(socket.cpp.obj):socket.cpp:(.text+0x623): more undefined references to __imp_zmq_setsockopt' follow ../../../lib/libuc_protocol.a(socket.cpp.obj):socket.cpp:(.text+0x9c7): undefined reference to __imp_zmq_close' ../../../lib/libuc_protocol.a(socket.cpp.obj):socket.cpp:(.text+0x1306): undefined reference to __imp_zmq_setsockopt' ../../../lib/libuc_protocol.a(socket.cpp.obj):socket.cpp:(.text+0x1571): undefined reference to __imp_zmq_socket' ../../../lib/libuc_protocol.a(worker.cpp.obj):worker.cpp:(.text+0x521): undefined reference to __imp_zmq_proxy_steerable' ../../../lib/libuc_protocol.a(zeromq.cpp.obj):zeromq.cpp:(.text+0x31a): undefined reference to __imp_zmq_errno' ../../../lib/libuc_protocol.a(certificate.cpp.obj):certificate.cpp:(.text+0x3a6): undefined reference to __imp_zmq_curve_public' ../../../lib/libuc_protocol.a(certificate.cpp.obj):certificate.cpp:(.text+0x685): undefined reference to __imp_zmq_curve_keypair' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x32e): undefined reference to __imp_zmq_msg_init_size' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x345): undefined reference to __imp_zmq_msg_data' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x372): undefined reference to __imp_zmq_msg_init' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x3dd): undefined reference to __imp_zmq_getsockopt' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x414): undefined reference to __imp_zmq_msg_size' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x420): undefined reference to __imp_zmq_msg_data' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x4e4): undefined reference to __imp_zmq_recvmsg' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x512): undefined reference to __imp_zmq_getsockopt' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x592): undefined reference to __imp_zmq_sendmsg' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x5f7): undefined reference to __imp_zmq_msg_close' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x696): undefined reference to __imp_zmq_msg_close' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x714): undefined reference to __imp_zmq_msg_init_size' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x72c): undefined reference to __imp_zmq_msg_data' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x765): undefined reference to __imp_zmq_msg_init' ../../../lib/libuc_protocol.a(frame.cpp.obj):frame.cpp:(.text+0x7ce): undefined reference to __imp_zmq_msg_init'

--

Environment

  • libzmq version (commit hash if unreleased): zeromq-4.3.0
  • OS: windows 64bit

Minimal test code / Steps to reproduce the issue

  1. what I tried in Makefile.mingw32

all: libzmq.a

perf: inproc_lat.exe inproc_thr.exe local_lat.exe local_thr.exe remote_lat.exe remote_thr.exe

libzmq.dll: $(OBJS)
g++ -shared -static -O2 -s -o $@ $^ -Wl,--out-implib,$@.a $(LIBS)

libzmq.a: $(OBJS)
ar cr $@ $?

What's the actual result? (include assertion message & call stack if applicable)

undefiend reference

What's the expected result?

should export correct libzmq.a

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions