use std::{ffi::CString, os::raw::c_char};
fn main() {
let great = CString::new("billionairegreathari\n").unwrap();
// println!("{:?}", great);
unsafe {
printf(great.as_ptr());
}
// let billionaire = 6;
// // println!("{}", billionaire as *const);
// println!("{:?}", &billionaire as *const i32);
// println!("{:?}", &billionaire);
}
#[link(name = "msvcrt")]
extern "C" {
#[cfg_attr(target_env = "msvc", link_name = "__imp_printf")]
fn printf(format: *const c_char);
}
= note: "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.40.33807\\bin\\HostX64\\x64\\link.exe" "/NOLOGO" "C:\\Users\\trueb\\AppData\\Local\\Temp\\rustcjgRdzq\\symbols.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.0dpmm3qyw1qnly6u8kj79zh29.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.0pdhc4hh17sz4eq5239uqmzeo.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.1mz1qjiu68co7al73eid7dgka.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.362cax5xb4voh2j7csaj13g8v.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.4lg6fd40rvo7idjptja7q02g3.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.59wz7hf80cq8i3335wi27x8hj.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.6gbh8a9pza9p6dodko1cz5xkg.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.6u9fizna55q9dfikzmufinqob.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.7gsojtpdzi2cy3k21cqt8mh3q.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.aax49qnfcb5i3fqkl401uid0a.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.bdvas58fftie4jdekto97qhif.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.be0ay111yri3vl2pjosrigtq4.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.bj4gh9z2piek1p2g6scdybjgu.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.c2z7srmc89axc4o0wz09gk82i.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.c93mxhfacmqnsamrcss4tt57j.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.ck2p4ohc7ky6eb0y1tmido6y6.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.dzthm07ulusv57t4ko59wkbbs.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.e60gyhobddby2qn85z8xsrawd.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.f01t0zy55s1263jk4ogx8hjdn.rcgu.o" "C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.5ckkcu5qhi20ycenz36n6nsuz.rcgu.o" "/LIBPATH:C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps" "/LIBPATH:C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "msvcrt.lib" "C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd-759718a9bb18a123.rlib" "C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libpanic_unwind-7da375a7ca1e9a5e.rlib" "C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_demangle-13c5a35fb3626718.rlib" "C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd_detect-67d9d7b318bd750d.rlib" "C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libhashbrown-1128f34f910afc3a.rlib" "C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_alloc-ec2cabfc22cdef7d.rlib" "C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libunwind-93dda7487230aeda.rlib" "C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcfg_if-814df84e64e9c749.rlib" "C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liballoc-bcbe36736b9f0af2.rlib" "C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_core-d08e4e7d05aff086.rlib" "C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcore-89ef43c30f9b928e.rlib" "C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcompiler_builtins-1426abde5263ac46.rlib" "kernel32.lib" "advapi32.lib" "ntdll.lib" "userenv.lib" "ws2_32.lib" "kernel32.lib" "kernel32.lib" "/defaultlib:msvcrt" "/NXCOMPAT" "/LIBPATH:C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "/OUT:C:\\Users\\trueb\\OneDrive\\Desktop\\dope\\dope-rs\\target\\debug\\deps\\dopers.exe" "/OPT:REF,NOICF" "/DEBUG" "/PDBALTPATH:%_PDB%" "/NATVIS:C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\intrinsic.natvis" "/NATVIS:C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\liballoc.natvis" "/NATVIS:C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libcore.natvis" "/NATVIS:C:\\Users\\trueb\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libstd.natvis"
= note: dopers.bdvas58fftie4jdekto97qhif.rcgu.o : error LNK2019: unresolved external symbol __imp_printf referenced in function _ZN6dopers4main17hb26dd8321d3cb0bcE
C:\Users\trueb\OneDrive\Desktop\dope\dope-rs\target\debug\deps\dopers.exe : fatal error LNK1120: 1 unresolved externals
bjorn3
February 10, 2025, 3:23pm
2
I'm pretty sure you should use printf
as link_name rather than __imp_printf
. The linker should be able to generate dllimport stubs automatically. You need to use #[link(name = "legacy_stdio_definitions")]
when compiling for an MSVC target however: libc/src/windows/mod.rs at 970cbcb18615cc22cc9ed45476a874348a90eca0 · rust-lang/libc · GitHub Or preferably use the libc crate instead which handles all these platform differences like symbol names and libraries to link for you.
3 Likes
module to learn the concept