Skip to content

Commit e60d734

Browse files
committed
feat: support build and link dynamic library
1 parent 1e8de34 commit e60d734

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1434,10 +1434,10 @@ impl Build {
14341434
.arg(dst.join(dynlib_name))
14351435
.args(&objects);
14361436
run(cmd, &self.cargo_output)?;
1437+
} else {
1438+
self.assemble(lib_name, &dst.join(static_name), &objects)?;
14371439
}
14381440

1439-
self.assemble(lib_name, &dst.join(static_name), &objects)?;
1440-
14411441
let target = self.get_target()?;
14421442
if target.env == "msvc" {
14431443
let compiler = self.get_base_compiler()?;

tests/test.rs

+23
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,29 @@ fn gnu_shared() {
354354
test.cmd(0).must_have("-shared").must_not_have("-static");
355355
}
356356

357+
#[test]
358+
fn gnu_link_shared() {
359+
reset_env();
360+
let test = Test::gnu();
361+
362+
let root_dir = env!("CARGO_MANIFEST_DIR");
363+
let src = format!("{root_dir}/dev-tools/cc-test/src/foo.c");
364+
let target = "x86_64-unknown-linux-gnu";
365+
366+
cc::Build::new()
367+
.host(target)
368+
.target(target)
369+
.opt_level(2)
370+
.out_dir(test.td.path())
371+
.file(&src)
372+
.shared_flag(true)
373+
.static_flag(false)
374+
.link_shared_flag(true)
375+
.compile("foo");
376+
377+
assert!(test.td.path().join("libfoo.so").exists());
378+
}
379+
357380
#[test]
358381
fn gnu_flag_if_supported() {
359382
reset_env();

0 commit comments

Comments
 (0)