erickt / rust-zmq

Rust zeromq bindings.
Apache License 2.0
887 stars 190 forks source link

Problem with Windows build #213

Closed SergeyPalamarchuk closed 5 years ago

SergeyPalamarchuk commented 6 years ago

Hello. I'm trying to build rust-zmq on Windows platform, but I'd collided with problem on link stage. I was set enviroment varible LIBZMQ_PREFIX, as discribed in guide. linker can't find external link _ZN18build_script_build4main. Is anybody know that problem? Maby the reason in version libzmq? Then which is version libzmq I must use?

rotty commented 6 years ago

Could you paste the exact steps you took, and include the output of the tools? rust-zmq's appveyor build is working, so maybe you can take inspiration from its build script.

Michael-F-Bryan commented 6 years ago

I just got a similar (-ish) linker error when cargo tried to run the zmq build script. The linker error says the __imp_zmq_has symbol isn't found.

This is on a windows 10 machine running the 0b72d48f8 2018-04-10 nightly. ZeroMQ 4.0.4 is installed on my machine.

output.txt

darikg commented 5 years ago

I ran into the same problem today:

error LNK2019: unresolved external symbol __imp_zmq_has referenced in function _ZN18build_script_build4main17h1f67e42f1e4bb592E

The appveyor script installs zeromq from source for version 4.2.0, but the zeromq Windows binary page stopped updating after 4.0.4. Instead of trying to compile from source myself I used conda:

conda create -n rust-zmq
activate rust-zmq
conda install zeromq
SET LIBZMQ_PREFIX=C:\Users\dg\Miniconda\envs\rust-zmq\Library\
cargo clean
cargo build

(I think I also had to rename a couple files C:\Users\dg\Miniconda\envs\rust-zmq\Library\ from libzmq.lib to zmq.lib, etc)

rotty commented 5 years ago

Ok, so this is more of a documentation issue -- we should document more clearly that Windows users need to build libzmq from source. Once the documentation is updated, this issue can be closed, I think.

oblique commented 5 years ago

I believe it will be simpler if zmq-sys actually compiles zeromq and statically links it. This is what libz-sys, curl-sys and many other crates *-sys do.

zachlute commented 5 years ago

FWIW, I just put up PR #239 to do the build and link on Windows. You still have to install CMake yourself, but it should handle everything else. I don't know how active this project is at this point, but I'm open to input.

hansieodendaal commented 5 years ago

Hi there, see related comment in #241.

We use the latest version of libzmq (v4.3.2), which I compiled with Visual Stuio 2017 using the CMake -> Install -> ZeroMQ menu option. I also copied the static lib from libzmq-mt-s-4_3_2.lib to zmq.lib in the lib folder.

I tried to compile branch https://github.com/oblique/rust-zmq/tree/build-zmq, but got some errors, which is the similar to what I get when compiling from master at https://github.com/erickt/rust-zmq

C:\Users\me\Documents\Code\zmq\rust-zmq-oblique>cargo build
   Compiling error-chain v0.10.0
   Compiling cc v1.0.31
   Compiling pkg-config v0.3.14
   Compiling toml v0.2.1
   Compiling libc v0.2.50
   Compiling glob v0.2.11
   Compiling cfg-if v0.1.7
   Compiling bitflags v0.7.0
   Compiling log v0.4.6
   Compiling metadeps v1.1.2
   Compiling cmake v0.1.35
   Compiling zmq-sys v0.9.0 (C:\Users\me\Documents\Code\zmq\rust-zmq-oblique\zmq-sys)
   Compiling zmq v0.9.0 (C:\Users\me\Documents\Code\zmq\rust-zmq-oblique)
error: linking with `link.exe` failed: exit code: 1120
  |
  = note: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX64\\x64\\link.exe" "/NOLOGO" "/NXCOMPAT" 
  "/LIBPATH:C:\\Users\\me\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.12o3ayia9nhh10ck.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.155eg0ivvqp2mutp.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.1cdy22vls1yyb76b.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.1j0zugbeb6jitx1v.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.1lalou4fkcnaof5a.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.1n4vamiheiogcfwj.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.1vlvow2ufrnd1z5f.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.1ydpiaat0p6t0298.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.22jydi5sluc1xlfo.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.28wmpcw7q8zpqc48.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.29q17rupwuwe3x88.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.2brg1nlypw5ix3t.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.2j1ni91fjuuwp0nr.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.2kzv4s34itq8oj10.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.2lu3dolcj0kh0kfd.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.2xhyy55kqcn1j7w7.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.3dvu0olsvif5479x.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.47gyksltkiactgpc.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.47rivdmigpm0jl6x.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.48hjqo6dhlvpkfut.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.4nueqbbt0lf6uoa7.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.4t38g00p87yce7id.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.563dbr7v8i6intnj.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.56ml527k35lfqb13.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.5f49loa6wlsv3g8o.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.5g3x21g1luegsnyp.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.6pja8lropked6x6.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.9wyioqrxn33k7s1.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.b3jhf1tul77ml20.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.f9mow7ikicexecy.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.hghfhonpxjutb65.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.kjg3zzq4vb0gqr9.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.r5q0a58gli79yc2.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.xiutra319iouez9.rcgu.o" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.y3mouaru42ybesw.rcgu.o" 
  "/OUT:C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.exe" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\build\\zmq-66a861f99677e6f3\\build_script_build-66a861f99677e6f3.1x433sum4zshh0hd.rcgu.o" 
  "/OPT:REF,NOICF" "/DEBUG" "/NATVIS:C:\\Users\\me\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\intrinsic.natvis" 
  "/NATVIS:C:\\Users\\me\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\liballoc.natvis" 
  "/NATVIS:C:\\Users\\me\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libcore.natvis" 
  "/LIBPATH:C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\deps" 
  "/LIBPATH:C:\\Users\\me\\CMakeBuilds\\97da22d4-c402-2733-9a95-d472ad265e4d\\install\\x64-Release\\lib" 
  "/LIBPATH:C:\\Users\\me\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\deps\\libzmq_sys-30fcbb6f71d66d1b.rlib" 
  "C:\\Users\\me\\Documents\\Code\\zmq\\rust-zmq-oblique\\target\\debug\\deps\\liblibc-87d062f1c0297539.rlib" 
  "C:\\Users\\me\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd-eac22bdd33861df1.rlib" 
  "C:\\Users\\me\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libpanic_unwind-bd033cefe9225fc7.rlib" 
  "C:\\Users\\me\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_demangle-9c763a9039daafe7.rlib" 
  "C:\\Users\\me\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libunwind-b78aa403ab20ed15.rlib" 
  "C:\\Users\\me\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liblibc-9ce0d2c678ca4d7e.rlib" 
  "C:\\Users\\me\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liballoc-f94457de73e50aed.rlib" 
  "C:\\Users\\me\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_core-093f258726e3d316.rlib" 
  "C:\\Users\\me\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcore-e93a1be54a7dcb84.rlib" 
  "C:\\Users\\me\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcompiler_builtins-f6363f8aaee883c4.rlib" "zmq.lib" 
  "advapi32.lib" "ws2_32.lib" "userenv.lib" "msvcrt.lib"
  = note: build_script_build-66a861f99677e6f3.47rivdmigpm0jl6x.rcgu.o : error LNK2019: unresolved external symbol __imp_zmq_has referenced in function _ZN18build_script_build4main17h46d2c95a282bdf00E
          C:\Users\me\Documents\Code\zmq\rust-zmq-oblique\target\debug\build\zmq-66a861f99677e6f3\build_script_build-66a861f99677e6f3.exe : fatal error LNK1120: 1 unresolved externals

error: aborting due to previous error

error: Could not compile `zmq`.

To learn more, run the command again with --verbose.

C:\Users\me\Documents\Code\zmq\rust-zmq-oblique>
oblique commented 5 years ago

@hansieodendaal You need to recompile libzmq with /GL- C++ flag.

For more info check https://github.com/rust-lang/rust/issues/26003 and MSVC's whole program optimization.

hansieodendaal commented 5 years ago

@oblique, thank you for your response. I cannot find such an option in the CMake files generated by Visual Studio when I open the libzmq folder. It seems that is only available if a project solution is used. My CMakeCache.txt file.

hansieodendaal commented 5 years ago

See PR #249 for dynamic linking of ZeroMQ. Also added basic installation instructions.

rotty commented 5 years ago

I think the Windows issues should now all be addressed by PR #267 and #249.