在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

文盤Rust-本地庫引發(fā)的依賴沖突簡析

jf_wN0SrCdH ? 來源:京東云開發(fā)者 ? 2023-03-17 16:42 ? 次閱讀

問題描述

clickhouse 的原生 rust 客戶端目前比較好的有兩個(gè)clickhouse-rsclickhouse.rs

clickhouse-rs 是 tcp 連接;clickhouse.rs 是 http 連接。

兩個(gè)庫在單獨(dú)使用時(shí)沒有任何問題,但是,在同一工程同時(shí)引用時(shí)會報(bào)錯(cuò)。

Cargo.toml

# clickhouse http
clickhouse = {git = "https://github.com/loyd/clickhouse.rs", features =      ["test-util"]}


# clickhouse tcp
clickhouse-rs={git="https://github.com/suharev7/clickhouse-rs",features=["default"]}報(bào)錯(cuò)如下


報(bào)錯(cuò)如下:

    Blocking waiting for file lock on package cache
    Updating git repository `https://github.com/suharev7/clickhouse-rs`
    Updating crates.io index
error: failed to select a version for `clickhouse-rs-cityhash-sys`.
    ... required by package `clickhouse-rs v1.0.0-alpha.1 (https://github.  com/suharev7/clickhouse-rs#ecf28f46)`
    ... which satisfies git dependency `clickhouse-rs` of package   `conflict v0.1.0 (/Users/jiashiwen/rustproject/conflict)`
versions that meet the requirements `^0.1.2` are: 0.1.2


the package `clickhouse-rs-cityhash-sys` links to the native library   `clickhouse-rs`, but it conflicts with a previous package which links to   `clickhouse-rs` as well:
package `clickhouse-rs-cityhash-sys v0.1.2`
    ... which satisfies dependency `clickhouse-rs-cityhash-sys = "^0.1.2"`   (locked to 0.1.2) of package `clickhouse v0.11.2 (https://github.com/  loyd/clickhouse.rs#4ba31e65)`
    ... which satisfies git dependency `clickhouse` (locked to 0.11.2) of   package `conflict v0.1.0 (/Users/jiashiwen/rustproject/conflict)`
Only one package in the dependency graph may specify the same links value.   This helps ensure that only one copy of a native library is linked in the   final binary. Try to adjust your dependencies so that only one package   uses the links ='clickhouse-rs-cityhash-sys' value. For more information,   see https://doc.rust-lang.org/cargo/reference/resolver.html#links.


failed to select a version for `clickhouse-rs-cityhash-sys` which could   resolve this conflict

錯(cuò)誤描述還是很清楚的,clickhouse-rs-cityhash-sys 這個(gè)庫沖突了。仔細(xì)看了一下兩個(gè)庫的源碼,引用 clickhouse-rs-cityhash-sys 庫的方式是不一樣的。clickhouse.rs 是在其 Cargo.toml 文件中使用最普遍的方式引用的:

clickhouse-rs-cityhash-sys = { version = "0.1.2", optional = true }

clickhouse-rs 是通過本地方式引用的:

[dependencies.clickhouse-rs-cityhash-sys]
path = "clickhouse-rs-cityhash-sys"
version = "0.1.2"

clickhouse-rs-cityhash-sys 的源碼直接放在 clickhouse-rs 工程目錄下面。

一開始是有個(gè)直觀的想法,如果在一個(gè)工程中通過workspace 進(jìn)行隔離,是不是會解決沖突問題呢?于是,工程的目錄結(jié)構(gòu)從這樣:

.
├── Cargo.lock
├── Cargo.toml
└── src
    └── main.rs

改成了這樣

.
├── Cargo.lock
├── Cargo.toml
├── ck_http
│   ├── Cargo.toml
│   └── src
├── ck_tcp
│   ├── Cargo.toml
│   └── src
└── src
    └── main.rs

新建了兩個(gè)lib

cargo new ck_http --lib
cargo new ck_tcp --lib

在 workspace 中分別應(yīng)用 clickhouse-rs 和 clickhouse.rs ,刪除根下 Cargo.toml 文件中的依賴關(guān)系。很可惜,workspace 沒有解決問題,報(bào)錯(cuò)沒有一點(diǎn)兒差別。

又仔細(xì)看了看報(bào)錯(cuò),里面有這樣一段:

 the package `clickhouse-rs-cityhash-sys` links to the native library   `clickhouse-rs`, but it conflicts with a previous package which links to   `clickhouse-rs`

難道是 clickhouse-rs 這個(gè)名字沖突了?直接把clickhouse-rs源碼拉下來作為本地庫來試試呢?于是把 clickhouse-rs clone 到本地,稍稍修改一下ck_tcp workspace 的 Cargo.toml

clickhouse-rs = { path = "../../clickhouse-rs", features = ["default"]}

編譯后沖突依舊存在。翻翻clickhouse-rs/clickhouse-rs-cityhash-sys/Cargo.toml,里面的一個(gè)配置很可疑:

[package]
...
...
links = "clickhouse-rs"

把 links 隨便改個(gè)名字比如:links = "ck-rs-cityhash-sys",編譯就通過了。

錯(cuò)誤提示中這句話很重要:

Only one package in the dependency graph may specify the same links value.

看了一下 links 字段的含義

The links field
The links field specifies the name of a native library that is being linked to. More information can be found in the links section of the build script guide.

links 指定了本地包被鏈接的名字,在這里引起了沖突,改掉本地包中的名字自然解決了沖突,在依賴圖中保證唯一性很重要。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • TCP通信
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    4293
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    230

    瀏覽量

    6670

原文標(biāo)題:文盤Rust -- 本地庫引發(fā)的依賴沖突

文章出處:【微信號:Rust語言中文社區(qū),微信公眾號:Rust語言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何使用Rust連接Redis

    Rust操作Redis。 Redis依賴Rust中有很多Redis的客戶端可以選擇,這里我們選擇使用redis-rs
    的頭像 發(fā)表于 09-19 16:22 ?2502次閱讀

    如何在Rust中連接和使用MySQL數(shù)據(jù)

    MySQL是一個(gè)廣泛使用的關(guān)系型數(shù)據(jù)Rust作為一門相對較新的系統(tǒng)級編程語言,具有C語言般的高性能、安全、并發(fā)等特性,因此與MySQL一起使用是一種非常有趣的選擇。在本教程中,我們將手把手地展示
    的頭像 發(fā)表于 09-30 17:05 ?1777次閱讀

    Maven依賴沖突的幾種常用方法

    Maven依賴沖突是一個(gè)很常見的問題,它通常發(fā)生在項(xiàng)目中有多個(gè)依賴包含相同的不同版本時(shí)。我這邊解決Maven依賴
    的頭像 發(fā)表于 09-30 11:11 ?966次閱讀
    Maven<b class='flag-5'>依賴</b><b class='flag-5'>沖突</b>的幾種常用方法

    怎么解決依賴關(guān)系中vi沖突

    沖突項(xiàng)是Error Cluster From Error Code.vi。如果不在依賴關(guān)系中可以放進(jìn)項(xiàng)目中來解決同名沖突。在依賴關(guān)系中怎么
    發(fā)表于 09-25 21:14

    如何利用C語言去調(diào)用rust靜態(tài)

    提示在rust的靜態(tài)libfoo.a中也有__aeabi_ul2d的實(shí)現(xiàn),與libgcc.a中沖突。這點(diǎn)暫時(shí)沒理解得太清楚,不過release版本編譯的沒有引入這個(gè)實(shí)現(xiàn)$ carg
    發(fā)表于 06-21 10:27

    Armv8.1-M PAC和BTI擴(kuò)展

    1、Armv8.1-M PAC和 BTI 擴(kuò)展Armv8-M通過Trustzone for Armv8-M, Memory Protection Unit (MPU) 和Privileged
    發(fā)表于 08-05 14:56

    Rust代碼中加載靜態(tài)時(shí),出現(xiàn)錯(cuò)誤 ` rust-lld: error: undefined symbol: malloc `怎么解決?

    “ [i]malloc ”、“ [i]exit ”。我驗(yàn)證了使用 ` [i]nm ` 命令。 問題是我打算使用 ffi 在 rust 中使用這個(gè)靜態(tài)。當(dāng)我嘗試在我的 Rust 代碼中加載靜態(tài)
    發(fā)表于 06-09 08:44

    EPON技術(shù)

    EPON技術(shù) EPON是一個(gè)新技術(shù),用于保證提供一個(gè)高品質(zhì)與高帶寬利用率的應(yīng)用。   EPON在日本、韓國、中國大陸、中國臺灣及其它以以太網(wǎng)絡(luò)為基礎(chǔ)的地區(qū)都
    發(fā)表于 01-22 10:43 ?892次閱讀

    鼠標(biāo)HID例程(中)

    鼠標(biāo) HID 例程 緊接《鼠標(biāo) HID 例程(上)》一,繼續(xù)向大家介紹鼠 標(biāo) HID 例程的未完的內(nèi)容。
    發(fā)表于 07-26 15:18 ?0次下載

    5G AAU 功放控制和監(jiān)測模塊

    5G AAU 功放控制和監(jiān)測模塊
    發(fā)表于 10-28 12:00 ?2次下載
    5G AAU 功放控制和監(jiān)測模塊<b class='flag-5'>簡</b><b class='flag-5'>析</b>

    Rust -- rust連接oss

    我們以 [S3 sdk](https://github.com/awslabs/aws-sdk-rust)為例來說說基本的連接與操作,作者驗(yàn)證過aws、京東云、阿里云。主要的增刪改查功能沒有什么差別。
    的頭像 發(fā)表于 05-12 16:18 ?638次閱讀

    AFE8092幀同步特性

    AFE8092幀同步特性
    的頭像 發(fā)表于 08-24 13:37 ?702次閱讀
    AFE8092幀同步特性<b class='flag-5'>簡</b><b class='flag-5'>析</b>

    基于Rust的Log日志介紹

    Rust是一門系統(tǒng)級編程語言,因其安全性、高性能和并發(fā)性而備受歡迎。在Rust應(yīng)用程序中,日志記錄是一項(xiàng)非常重要的任務(wù),因?yàn)樗梢詭椭_發(fā)人員了解應(yīng)用程序的運(yùn)行情況并解決問題。Rust的Log
    的頭像 發(fā)表于 09-19 14:49 ?3572次閱讀

    FastTime-純Rust編寫的高并發(fā)快速時(shí)間

    FastTime, 純Rust編寫的快速時(shí)間, 并發(fā): 2800萬+/秒. 一、組件
    的頭像 發(fā)表于 11-06 09:23 ?689次閱讀

    基于Rust的嵌入式符合ACID的鍵值數(shù)據(jù)

    surrealkv -- 基于 Rust 的 low level、版本化、嵌入式、符合 ACID 的鍵值數(shù)據(jù)
    的頭像 發(fā)表于 12-28 11:29 ?916次閱讀
    主站蜘蛛池模板: 加勒比一到三区 | 一级特级女人18毛片免费视频 | 丁香六月婷婷综合 | 国产汉服被啪福利在线观看 | 99精品国产高清自在线看超 | 欧美午夜一区 | 国产综合久久久久影院 | videosxxoo18在线| 欧美黄色片 一级片 | 一级特黄aaaaaa大片 | 亚洲一区小说区中文字幕 | 日本不卡毛片一二三四 | 天堂网在线www最新版在线 | 国产精品爱久久久久久久三级 | 色天天综合色天天看 | 天天干夜夜怕 | 欧美色图日韩 | 亚洲视频一区二区三区 | 久久久精品午夜免费不卡 | 国产午夜视频在永久在线观看 | 成人夜色香网站在线观看 | 手机看片自拍自自拍日韩免费 | 涩狠狠狠狠色 | 91大神网址| 免费国产成人α片 | 日本黄色大片在线播放视频免费观看 | 狠狠狠狼鲁欧美综合网免费 | free性乌克兰高清videos | 色在线网站免费观看 | 久久婷婷人人澡人人爱91 | 欧美日韩精品一区二区另类 | 国模私拍视频在线 | 在厨房乱子伦在线观看 | 2021久久精品国产99国产 | 久久久久免费观看 | youjizz国产 | 天天摸天天碰色综合网 | 在线观看免费xx高清视频 | 欧美成网站 | 久久综合色视频 | 国产午夜精品久久久久免费视 |