How to I tell Rust where to look for a static library?

后端 未结 2 366
余生分开走
余生分开走 2021-01-11 16:56

Is there any way to tell Rust where to look for my static library? Example code

#[link(name = \"/this/is/the/path/libfoo.a\", kind = \"static\")]


        
相关标签:
2条回答
  • 2021-01-11 17:49

    rustc invokes the system linker which looks for all libraries specified in #[link(...)] in library directories. There are usually several default library directories (like /lib and /usr/lib on Linux), and more can be specified via linker flags (rustc accepts -L options which it then passes through to the linker).

    If you invoke rustc directly, you can use the -L option to add additional library directories which will be then passed through to the linker. If you use Cargo, however, you've got a few more options:

    • Cargo adds the /target/<profile>/deps directory as a library source directory.

    • You can use cargo rustc

      cargo rustc -- -L /path/to/library/directory 
      
    • You can specify the RUSTFLAGS environment variable:

      RUSTFLAGS='-L /path/to/library/directory' cargo build
      
    • You can use a build script to output more linker options

      println!("cargo:rustc-link-lib=static=foo");
      println!("cargo:rustc-link-search=native=/path/to/foo");
      

    The easiest way for you, I think, is to add a custom build script which will copy or create a symlink to your library in the corresponding /target/<profile>/deps directory.

    0 讨论(0)
  • To add on to the accepted answer, what worked for me is as following:

    • under debug build, putting dependency files under target/debug/deps worked; but putting files under target/debug/native/* did not seem to work.

    Cargo seems to only look under target/debug/deps by default.

    You can run with cargo build --verbose to see the verbose rustc commands and the options used. -L option specifies additional link dependency directory.

    0 讨论(0)
提交回复
热议问题