Trouble compiling FUSE filesystems on OS X
Categories:
Troubleshooting FUSE Filesystem Compilation on macOS

Learn how to diagnose and resolve common compilation issues when building FUSE-based filesystems on macOS, focusing on pkg-config
and Makefile configurations.
Compiling FUSE (Filesystem in Userspace) based filesystems on macOS can sometimes be a challenging task, especially when dealing with dependencies and build systems. Developers often encounter issues related to pkg-config
not finding necessary libraries or incorrect Makefile configurations. This article will guide you through common pitfalls and provide solutions to successfully compile your FUSE filesystems on macOS.
Understanding the Role of pkg-config
pkg-config
is a helper tool used in the compilation process to find libraries and their associated CFLAGS and LDFLAGS. For FUSE, it's crucial that pkg-config
can locate the osxfuse
package. If pkg-config
cannot find osxfuse
, your build system (typically a Makefile) will fail to include the correct compiler and linker flags, leading to 'file not found' or 'undefined reference' errors.
flowchart TD A[Start Compilation] --> B{pkg-config osxfuse --cflags --libs?} B -- Yes --> C[Makefile gets FUSE flags] B -- No --> D[Compilation Fails: Missing FUSE headers/libs] C --> E[Compile FUSE Filesystem] D --> F[Troubleshoot pkg-config path/installation] E --> G[Success!] F --> B
Flowchart illustrating the role of pkg-config in FUSE compilation.
Common pkg-config Issues and Solutions
The most frequent problem is pkg-config
not being able to locate the .pc
file for osxfuse
. This usually happens because osxfuse
was installed in a non-standard location, or pkg-config
's search path (PKG_CONFIG_PATH
) is not correctly configured.
xcode-select --install
) and Homebrew is up-to-date (brew update && brew upgrade
) before attempting complex compilations on macOS.1. Verify FUSE Installation
First, ensure that FUSE for macOS (formerly OSXFUSE) is properly installed. You can download it from the official GitHub releases page or install via Homebrew: brew install --cask macfuse
(for newer versions) or brew install osxfuse
(for older versions).
2. Locate osxfuse.pc
After installation, find the osxfuse.pc
file. It's typically located in /usr/local/lib/pkgconfig
or /opt/homebrew/lib/pkgconfig
if installed via Homebrew on Apple Silicon. You can use find /usr/local -name "osxfuse.pc"
or find /opt/homebrew -name "osxfuse.pc"
to locate it.
3. Set PKG_CONFIG_PATH
If pkg-config
cannot find osxfuse.pc
, you need to tell it where to look. Set the PKG_CONFIG_PATH
environment variable to the directory containing osxfuse.pc
. For example, if it's in /usr/local/lib/pkgconfig
, you would use: export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"
. Add this to your shell's profile (.bash_profile
, .zshrc
, etc.) for persistence.
4. Test pkg-config
After setting PKG_CONFIG_PATH
, test if pkg-config
can now find osxfuse
: pkg-config osxfuse --cflags --libs
. This command should output the necessary compiler and linker flags without errors. If it still fails, double-check the path and file existence.
Adjusting Makefiles for FUSE
Once pkg-config
is correctly configured, your Makefile needs to utilize it. Many FUSE projects already have pkg-config
integration, but sometimes manual adjustments are needed, especially for older projects or custom build setups.
FUSE_CFLAGS := $(shell pkg-config osxfuse --cflags)
FUSE_LIBS := $(shell pkg-config osxfuse --libs)
CFLAGS += $(FUSE_CFLAGS)
LDFLAGS += $(FUSE_LIBS)
my_fuse_filesystem: my_fuse_filesystem.c
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
Example Makefile snippet demonstrating how to integrate pkg-config
for FUSE flags.
pkg-config
is already being used. Duplicating flags can lead to unexpected compilation issues or warnings. Always prefer using pkg-config
if available.If your Makefile is not using pkg-config
, you might see hardcoded paths or flags. In such cases, you may need to manually update these paths to point to your FUSE installation. However, the pkg-config
approach is generally more robust and portable.
Troubleshooting Specific Errors
Here are some common error messages and what they typically indicate:
Package osxfuse was not found in the pkg-config search path.
Perhaps you should add the directory containing `osxfuse.pc`
to the PKG_CONFIG_PATH environment variable
No package 'osxfuse' found
Error indicating pkg-config
cannot find the osxfuse
package.
This error directly points to a PKG_CONFIG_PATH
issue. Follow the steps above to locate osxfuse.pc
and set the environment variable correctly.
my_fuse_filesystem.c:1:10: fatal error: 'fuse.h' file not found
#include <fuse.h>
Error indicating missing FUSE header files.
This means the compiler cannot find the FUSE header files. This is usually a symptom of pkg-config
failing to provide the correct -I
(include) flags, or FUSE not being installed correctly. Verify pkg-config osxfuse --cflags
output and ensure FUSE is installed.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Linker error indicating missing FUSE libraries.
This error indicates that the linker cannot find the FUSE libraries. Similar to header issues, this often stems from pkg-config
not providing the correct -L
(library path) and -l
(library name) flags. Check the output of pkg-config osxfuse --libs
and ensure FUSE libraries are present in the specified paths.