Comments (2)
I've read that this is possible to have multiple cxx rlib, one rust static library that does extern crate thingy.
Until the rlib
format is stabilized for external linker consumption, you do need to ensure that only one rust static library is linked into a C/C++ executable. Adding a dummy crate that depends on the crates you are interested in would be a solution and could be automated by generating a corresponding Cargo.toml.
As for running cxxbridge
: I don't work with C++ myself, but in principle all you need to do is run the cxxbridge
command once for every file that needs cxx bindings. A nice solution might be to parse the cargo metadata
output of the staticlib
crate, and run cxxbridge
on every dependency that depends directly on cxx
(My assumption is that you only depend on cxx
directly when you want bindings for that crate). There is already some parsing of cargo metadata implemented, to determine the version of cxxbridge
to use.
For a first test, this dependency parsing could be skipped entirely and just pass the relevant .rs
file manually via the FILES parameter. The corrosion_add_cxxbridge
function needs to be adapted slightly for this to allow absolute paths, and still place the generated files into sensible directories, but I think the cxxbridge itself doesn't really need to know about the crate name or anything.
Then you have a bunch of .cc
and .h
files, and if there are no duplicate symbol names, just linking the generated cxx static lib with the rust static lib into your C++ project should hopefully work.
from corrosion.
Ok I see, some hours of exploration/experiment are still needed. I'm still new to rust so I'm not that fluent in all of the ecosystem.
I think I will go the simple way of linking to dynamic libraries which should solve the issues right?
from corrosion.
Related Issues (20)
- Support `$<CONFIG>` in `OUTPUT_DIRECTORY` HOT 6
- [Bug]: Some crate requires AR_<triple> environment to cross-compile HOT 1
- [Bug]: Regression caused by passing AR? commit b72c8ceb52f5d0235ce0fc268cfeff20ce56e8d8? HOT 1
- Upstream Rust language support
- [Bug]:cross compile failed HOT 1
- [Bug]: cross compilation from linux to windows with build tools fails. HOT 4
- [Enhancement]: Vcpkg support HOT 5
- [Bug]: "multiple rules generate" with Ninja Multiconfig in CROSS_CONFIG mode HOT 10
- [Bug]: Macos build with -F rather than -L HOT 4
- unused crates in a workspace not included in package, but still expected HOT 3
- corrosion_import_crate: issue with PROFILE argument in combination with CRATES
- [Bug]: corrosion_link_libraries does not include transitive dependencies HOT 2
- Breaking change to target names containing dashes with Rust 1.79 HOT 3
- corrosion_experimental_cbindgen always triggers rebuilds of files that include the generated header HOT 3
- corrosion_link_libraries behavior vs. expectation HOT 1
- [Bug]: undefined symbols during link-time on Windows with LLVM HOT 8
- corrosion_set_features did not work HOT 8
- [Bug]: On error, FindRust puts `Rust_FOUND` in wrong scope HOT 1
- Detect and issue a warning if a different corrosion version is already included.
- [Bug]: strip=true and missing pdb files on Windows HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from corrosion.