Size: a a a

Rust — русскоговорящее сообществo

2020 November 15

IK

Ivan Kalinin in Rust — русскоговорящее сообществo
Всем привет. Какого рода магия нужна чтобы статически линкануть библиотеку на плюсах к расту?

- Все нужнык зависимости - добавил (через ar и libtool)
- В build.rs нужные флаги - есть
    let dst = Config::new("./")
       ...
       .build();

   println!("cargo:rustc-link-lib=dylib=stdc++");
   println!("cargo:rustc-link-search=native={}", dst.display());
   println!("cargo:rustc-link-lib=static=tonlib-sys-cpp-bundled");

...
- Ошибки - есть(
Почему-то при линковке всё равно ругается на undefined reference стандартных методов

Что могло быть пропущено?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Может проблемы с манглингом?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Ivan Kalinin
Всем привет. Какого рода магия нужна чтобы статически линкануть библиотеку на плюсах к расту?

- Все нужнык зависимости - добавил (через ar и libtool)
- В build.rs нужные флаги - есть
    let dst = Config::new("./")
       ...
       .build();

   println!("cargo:rustc-link-lib=dylib=stdc++");
   println!("cargo:rustc-link-search=native={}", dst.display());
   println!("cargo:rustc-link-lib=static=tonlib-sys-cpp-bundled");

...
- Ошибки - есть(
Почему-то при линковке всё равно ругается на undefined reference стандартных методов

Что могло быть пропущено?
А каких методов?
источник

IK

Ivan Kalinin in Rust — русскоговорящее сообществo
У operator new а std allocator?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Ivan Kalinin
У operator new а std allocator?
Что.
Покажи ошибку?
источник

c

call eax in Rust — русскоговорящее сообществo
Ivan Kalinin
У operator new а std allocator?
🧙магия еретическая, покажи ошибки
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Ivan Kalinin
У operator new а std allocator?
В расте нет оператора new
источник

IK

Ivan Kalinin in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Что.
Покажи ошибку?
Извиняюсь, надо было сразу приложить. Вот:

https://pastebin.com/ALV94haP
источник

MP

Mag Pie in Rust — русскоговорящее сообществo
Ivan Kalinin
У operator new а std allocator?
У бокса есть аллокатор
источник

MP

Mag Pie in Rust — русскоговорящее сообществo
Должен быть
источник

IK

Ivan Kalinin in Rust — русскоговорящее сообществo
Здесь именно проблема в том что линкую плюсовую либу к расту и при линковке куда-то пропали символы стандартной библиотеки, не смотря на то что есть dylib=stdc++
источник

c

call eax in Rust — русскоговорящее сообществo
Libstdc++ неслинкован
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Вау. Ощущение, что он не линкует к плюсовой стдлибе.
источник

IK

Ivan Kalinin in Rust — русскоговорящее сообществo
Эта строка разве не делает этого?

println!("cargo:rustc-link-lib=dylib=stdc++");
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Ivan Kalinin
Эта строка разве не делает этого?

println!("cargo:rustc-link-lib=dylib=stdc++");
А если статически слинковать?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Хотя не должно быть нужно
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Ivan Kalinin
Эта строка разве не делает этого?

println!("cargo:rustc-link-lib=dylib=stdc++");
Запусти с verbose, посмотри, как он линкер вызывает
источник

c

call eax in Rust — русскоговорящее сообществo
Ivan Kalinin
Эта строка разве не делает этого?

println!("cargo:rustc-link-lib=dylib=stdc++");
println!("cargo:rustc-flags=-l dylib=stdc++");
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
call eax
println!("cargo:rustc-flags=-l dylib=stdc++");
rustc-link-lib выглядит правильнее и должен делать то же самое
источник

IK

Ivan Kalinin in Rust — русскоговорящее сообществo
Хм, когда линкую статически то действительно ушли ошибки

println!("cargo:rustc-link-search=native=/usr/lib");
println!("cargo:rustc-link-lib=static=stdc++");
источник