kazuki0824 / recisdb-rs

recisdb-rs and b25-sys are more convenient Rust wrapper for libaribb25. recisdb can read both Unix character device-based and BonDriver-based TV sources.
GNU General Public License v3.0
70 stars 4 forks source link

リンクエラーで cargo build に失敗する #84

Closed sakuei-ld closed 10 months ago

sakuei-ld commented 10 months ago

README.md に沿って実行した場合、下記errorが出て cargo build に失敗しました。 error: could not find native static library aribb25, perhaps an -L flag is missing? error: could not compile b25-sys (lib) due to previous error; 2 warnings emitted

64bit系 Fedora、CentOS系で、libaribb25 をインストールせずに始めると起こるものと思います。 (Debian、Ubuntu系は試してないので分かりません……)

下記で lib ディレクトリを指定しているのが原因のようです。 https://github.com/kazuki0824/recisdb-rs/blob/9e80c8cf05eaefd737c7247a8b4f9e334ce0f134/b25-sys/build.rs#L92 64bit系 Fedora で libaribb25 を make install した際、lib64 directory に配置されるため、 上記で適切にリンクできないのだと思います。 lib64 に書き換えたら、問題なく通りました。

一応、下記の追加でも通りましたので、暫定的には追記で大丈夫だと思います。 println!("cargo:rustc-link-search=native={}/lib64", res.display());

Rust分からないので、実際のところ問題が無いのか、までは分かりません……。 もしかすると、lib or lib64 を識別する必要があるかもしれません。

kazuki0824 commented 10 months ago

@sakuei-ld ありがとうございます! Fedoraでのビルドはノーマークでした、、、CI設定してもいいかもしれないですね。

ひとまずFedoraでの再現手順を教えていただけますでしょうか?(libpcscliteを〜という方法でインストールした、など)

sakuei-ld commented 10 months ago

@kazuki0824 ちょっと見落としてました。 Podman の Fedora-minimal イメージ でのサンプルになりますが、下記の順で実行してビルドしました。 自分の Containerfile では、sed のところで lib→lib64 に書き換えて、無理矢理対応した感じです。 通常の Fedora や CentOS の場合は、dnf でも通ると思います (試してないので、絶対とは言えませんが)。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
export PATH="/root/.cargo/bin:${PATH}"
dnf5 install -y git
dnf5 install -y gcc gcc-c++ make cmake pcsc-lite-devel clang-devel
git clone --recursive https://github.com/kazuki0824/recisdb-rs.git
cd recisdb-rs
sed -i 's/lib"/lib64"/' ./b25-sys/build.rs
cargo build --release
kazuki0824 commented 10 months ago

docker run -it --rm fedora:latestにて

dnf install dnf5 dnf5-plugins
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
export PATH="/root/.cargo/bin:${PATH}"
dnf5 install -y git
dnf5 install -y gcc gcc-c++ make cmake pcsc-lite-devel clang-devel
git clone --recursive https://github.com/kazuki0824/recisdb-rs.git
cd recisdb-rs
sed -i 's/lib"/lib64"/' ./b25-sys/build.rs
cargo build --release

で再現しました。

println!("cargo:rustc-link-search=native={}/lib64", res.display()); の追加で修正します。