lib_cmd = "-dynamiclib";
} else { lib_cmd = "-shared"; }
+ // # Crate linking
+
let cstore = sess.cstore;
for cstore::get_used_crate_files(cstore).each {|cratepath|
if str::ends_with(cratepath, ".rlib") {
let ula = cstore::get_used_link_args(cstore);
for ula.each {|arg| cc_args += [arg]; }
+ // # Native library linking
+
+ // User-supplied library search paths (-L on the cammand line) These are
+ // the same paths used to find Rust crates, so some of them may have been
+ // added already by the previous crate linking code. This only allows them
+ // to be found at compile time so it is still entirely up to outside
+ // forces to make sure that library can be found at runtime.
+
+ let addl_paths = sess.opts.addl_lib_search_paths;
+ for addl_paths.each {|path| cc_args += ["-L" + path]; }
+
+ // The names of the native libraries
let used_libs = cstore::get_used_libraries(cstore);
for used_libs.each {|l| cc_args += ["-l" + l]; }
// Stack growth requires statically linking a __morestack function
cc_args += ["-lmorestack"];
+ // FIXME: At some point we want to rpath our guesses as to where
+ // native libraries might live, based on the addl_lib_search_paths
cc_args += rpath::get_rpath_flags(sess, output);
#debug("%s link args: %s", cc_prog, str::connect(cc_args, " "));
--- /dev/null
+// xfail-test FIXME I don't know how to test this
+// compile-flags:-L.
+// The -L flag is also used for linking native libraries
+
+// FIXME: I want to name a mod that would not link successfully
+// wouthout providing a -L argument to the compiler, and that
+// will also be found successfully at runtime.
+native mod WHATGOESHERE {
+ fn IDONTKNOW() -> u32;
+}
+
+fn main() {
+ assert IDONTKNOW() == 0x_BAD_DOOD_u32;
+}
\ No newline at end of file