User Tools

Site Tools


raspberry:cross-platform-compile:cross-compile-overview

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
raspberry:cross-platform-compile:cross-compile-overview [2026/09/02 20:35] – oscarraspberry:cross-platform-compile:cross-compile-overview [2026/09/04 12:41] (current) – [Cross Platform Development for Raspberry] oscar
Line 8: Line 8:
   - **Different Linux/Debian versions** on X86 build host and Raspberry runtime target   - **Different Linux/Debian versions** on X86 build host and Raspberry runtime target
  
-  - [[raspberry:cross-platform-compile:setup-for-identical-Debian-versions|Setup for Identical Debian versions]] +  - [[raspberry:cross-platform-compile:check-architecture|Check the architecture of Host and Target]]
-  - [[raspberry:cross-platform-compile:setup-for-different-Debian-versions|Setup for Different Debian versions]]+
  
-[[raspberry:cross-platform-compile:crossbuild-essential-armhf|crossbuild-essential-armhf]]+  - [[raspberry:cross-platform-compile:setup-for-identical-Debian-versions|For identical Debian distro/version]] 
 + 
 +  - [[raspberry:cross-platform-compile:setup-for-different-Debian-versions|For different Debian distro/version]] 
 + 
 +  - [[raspberry:cross-platform-compile:cross-platform-debugging|Cross Platform Debugging]] 
 + 
 + 
 +===== Compatibility rule ===== 
 +Build against the oldest operating-system release and CPU that the resulting 
 +binary must support. Do not link a Bookworm target against Trixie ARM libraries. Doing so can create 
 +dependencies on newer glibc or library symbols that are unavailable on the 
 +Bookworm target. For example: 
 +<code> 
 +Incorrect: 
 +Trixie compiler + Trixie armhf libraries -> Bookworm target 
 + 
 +Correct: 
 +Trixie compiler + Bookworm armhf sysroot -> Bookworm target 
 +</code>
  
 ===== The problem with different host and target ARM libraries ===== ===== The problem with different host and target ARM libraries =====
Line 50: Line 67:
        ".../lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.41' not found..."        ".../lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.41' not found..."
 </code> </code>
-This is one of the most common reasons why **building on a newer distribution for an older target** causes trouble.  +This is one of the most common reasons why **building on a newer distribution for an older target** causes trouble. It isn't only the **libraries** that matter. The headers matter too. Suppose you compile against Trixie's headers (///usr/include//), but run on Bookworm. You can potentially get differences in:
-It isn't only the **libraries** that matter. The headers matter too. Suppose you compile against Trixie's headers (///usr/include//), but run on Bookworm. You can potentially get differences in:+
   * API definitions   * API definitions
   * feature macros   * feature macros
Line 60: Line 76:
   * library-specific APIs   * library-specific APIs
 So the ideal relationship is: So the ideal relationship is:
-<code> 
-                   Raspbian Bookworm 
-                  ┌─────────────────┐ 
-                  │ headers         │ 
-                  │ libraries       │ 
-                  │ linker files    │ 
-                  │ ABI             │ 
-                  └────────┬────────┘ 
-                           │ 
-                           ▼ 
-                     cross compiler 
-                           │ 
-                           ▼ 
-                    your executable 
-</code> 
  
 That's why a **target-specific sysroot** is the clean solution. That's why a **target-specific sysroot** is the clean solution.
Line 90: Line 91:
  
 ====== Raspberry Pi OS vs Debian armhf ====== ====== Raspberry Pi OS vs Debian armhf ======
-One important distinction: Raspberry Pi OS vs Debian armhf. There is, however, a **very important caveat** for Raspberry Pi.+One important distinction: Raspberry Pi OS vs Debian armhf. Raspberry Pi OS is Debian-derived, but its 32-bit repository contains packages built for Raspberry Pi hardware and may contain versions or patches marked with `+rpt`. Use the Raspberry Pi OS repositories when Raspberry Pi OS is the 
 +target. Use Debian repositories only when the target is Debian armhf.
  
 If your target is **Raspberry Pi OS 32-bit**, don't blindly assume that Debian Bookworm's armhf libraries are an exact match. Debian itself points this out: If your target is **Raspberry Pi OS 32-bit**, don't blindly assume that Debian Bookworm's armhf libraries are an exact match. Debian itself points this out:
raspberry/cross-platform-compile/cross-compile-overview.1788381309.txt.gz · Last modified: by oscar