// main.cpp
import moduleTest;
#include <cstdio>
auto main() -> int
{
printf("retInt is: %d\n", retInt());
return 0;
}
// moduleTest.cpp
module;
export module moduleTest;
export auto retInt() -> int { return 42; }
$> zig c++ -std=c++20 -fmodules -fbuiltin-module-map -fmodules-ts -Xclang -emit-module-interface -c moduleTest.cpp -o moduleTest.pcm
LLD Link... ld.lld: error: /home/kassane/.cache/zig/o/ec639bf9d5e7c589c4e222dd65d28017/moduleTest.o:995: unclosed quote
Issue: llvm/llvm-project#61198
Hack fix (by: @vesim987)
$> cp $(zig c++ -std=c++20 -fmodules -fbuiltin-module-map -fmodules-ts -Xclang -emit-module-interface -c moduleTest.cpp -o moduleTest.pcm 2>&1 | grep "ld.lld: error" | sed 's/.*error: \(.*\):[0-9]\+.*/\1/g') moduleTest.pcm
Next steps
$> zig c++ -std=c++20 -fmodules -fbuiltin-module-map -c moduleTest.cpp
$> zig c++ -std=c++20 -fmodules -fbuiltin-module-map -fprebuilt-module-path=. -c main.cpp -o main.o
$> zig c++ -std=c++20 -fmodules -fbuiltin-module-map main.o moduleTest.o -o main
Output
$> ./main
retInt is: 42
zig c++
default link to LLVM libc++ (builtin).How to use another C++ ABI?
Example: https://en.cppreference.com/w/cpp/algorithm/ranges/sort
Linking to
libc++
(LLVM 15) ABILinking to
libstdc++
(GNU) ABI