rust-portaudio icon indicating copy to clipboard operation
rust-portaudio copied to clipboard

Can't compile even though portaudio is installed

Open programLyrique opened this issue 8 years ago • 10 comments

I'm using Mac OS.

I have added portaudio as a dependency in a project and I have the following error, both when using version 0.6.3 from crates.io and and from the git master:

Compiling portaudio v0.6.3 (https://github.com/RustAudio/rust-portaudio.git#dc1f284f)
error: could not find native static library `portaudio`, perhaps an -L flag is missing?
Could not compile `portaudio`.

However, I have installed portaudio with port:

$ ls /opt/local/lib | grep portaudio
libportaudio.2.dylib
libportaudio.a
libportaudio.dylib
libportaudiocpp.0.dylib
libportaudiocpp.a
libportaudiocpp.dylib

I have added it to the library path:

$ echo $LIBRARY_PATH
/opt/local/lib/

I have also tried cargo rustc -- -L/opt/local/bin/ without success... apparently, the flags added for rustc are not used to compile dependencies.

I have also tried to install portaudio with Homebrew (so that it is in the more usual location, in /usr/local/lib/) but it doesn't work either.

Anyway, shouldn't the build process download portaudio and compile it if it is not found?

programLyrique avatar Mar 23 '16 14:03 programLyrique

Have you tried cargo clean after installing portaudio, and before compiling?

limeburst avatar Apr 11 '16 05:04 limeburst

Same here, even after cargo clean.

pepyakin avatar May 25 '16 21:05 pepyakin

I am now using version 0.6.4 and it works flawlessly.

programLyrique avatar May 31 '16 10:05 programLyrique

I had a build issue with the same error as listed above. I think I have tracked down the problem and have a workaround. I'm on a few days old, clean install of macOS 10.11.5. I don't have ports or brew installed. I'm running the current beta of Xcode.

The stable version of PortAudio won't build on my setup, so I went with the daily snapshot from July 11. This builds fine on my system and I installed it under /usr/local. The 0.6.4 version of rust-portaudio fails to build against this setup with the error generated in the original parent issue.

I did some poking around and it looked to me like the build was always trying to do a static build no matter what settings and environment vars I supplied. I then discovered that if I commented out the "if pkg_config::Config::new:: ..." section in build.rs, the build worked fine. So, I checked out pkg-config-rs and did a build of it. The build completes successfully but the tests fail. I discovered that this is caused by the fact that I didn't have the pkg-config program installed on my system.

The fix: I downloaded pkg-config latest from https://pkg-config.freedesktop.org/releases/ and built and installed with a configuration of, ./configure --prefix=/usr/local --with-internal-glib

I then did a clean clone of rust-portaudio and ran cargo build and cargo test with no issues. All of the example programs run as they are supposed to.

RobAber avatar Jul 12 '16 18:07 RobAber

Similar problem. Running on mac OSX 10.11.5. portaudio is installed (/usr/local/lib/). I just tried tu run examples: cargo run --example sine.

I use version 0.7.0 and it works removing if pkg_config::Config::... and leaving the return inside.

rap2hpoutre avatar Aug 09 '16 15:08 rap2hpoutre

Thanks a lot everyone, I'll leave this open until a fix for the build.rs script lands. I won't have time to do this myself for a little while yet, so if anyone is considering making the fix feel free to open a PR.

mitchmindtree avatar Aug 11 '16 04:08 mitchmindtree

if anyone is considering making the fix feel free to open a PR

The "fix" I tried is not really a fix, it's a quick workaround. I replaced this:

if pkg_config::Config::new().atleast_version("19").find("portaudio-2.0").is_ok() {
    return;
}

With:

// if pkg_config::Config::new().atleast_version("19").find("portaudio-2.0").is_ok() {
    return; // <- return is still here
// }

I'm not sure it's what you want. Should we do something conditional like cfg!(target_os = "macos")?

rap2hpoutre avatar Aug 11 '16 08:08 rap2hpoutre

I found a solution. Just run brew install pkg-config too (and cargo clean if you have some mess). I will send a PR for readme.

rap2hpoutre avatar Aug 11 '16 08:08 rap2hpoutre

Yeah, I also feel that any fix here should just be in the readme and mention how to install pkg-config. The real problem seems to me to be in pkg-config-rs, so perhaps an issue needs to be opened there too.

RobAber avatar Aug 11 '16 08:08 RobAber

I've just tried this locally on my machine, and I noticed a small issue. I'm on a fairly fresh machine that didn't previously have PortAudio installed, and am using rust-portaudio 0.7.0.

~~I initially ran cargo build and got the standard "error: could not find native static library portaudio, perhaps an -L flag is missing?" message. I then did brew install portaudio && brew install pkg-config. Trying cargo build again led to the same error message.~~

~~At first I thought there must be something wrong with the build script or environment (which is what led me to this thread). However, after some experimenting, I determined that if I closed my terminal and reopened it, and then re-ran cargo build, things worked as expected.~~

~~I'm not sure what the issue exactly was though. Perhaps something to do with a environment variable brew sets? Can anyone reproduce it/any ideas?~~

It seems I forgot to cargo clean in between installing portaudio and rebuilding. It might be useful to add a comment to the README saying this is necessary if you've failed to build once.

ConnorGray avatar May 04 '17 02:05 ConnorGray