<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/98997>98997</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            llvm-ranlib produces invalid universal archives
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          michael-jabbour-sonarsource
      </td>
    </tr>
</table>

<pre>
    I am having problems linking against fat `.a` archives processed by `llvm-ranlib`. I could reproduce the problem on `llvm-ranlib` (version 18.1.8) installed [using brew](https://formulae.brew.sh/formula/llvm) on my Mac arm64 machine:

Start with a file `main.cpp` with the following content:

```
% cat main.cpp
#include <stdio.h>
int main() { printf("This is working as expected!\n"); }
```

Processing the fat archive when using `ranlib` from XCode command line developer tools works as expected:

```
% /opt/homebrew/opt/llvm/bin/clang++ -arch x86_64 -arch arm64 -o main.cpp.o -c main.cpp
% /Library/Developer/CommandLineTools/usr/bin/ar qc main_xcode.a main.cpp.o && /Library/Developer/CommandLineTools/usr/bin/ranlib main_xcode.a
% /opt/homebrew/opt/llvm/bin/clang++ -arch x86_64 -arch arm64 -o main_xcode main_xcode.a
% ./main_xcode
This is working as expected!
```

On the other hand, using `llvm-ranlib` causes the linker to fail:

```
% /opt/homebrew/opt/llvm/bin/llvm-ar qc main_llvm.a main.cpp.o && /opt/homebrew/opt/llvm/bin/llvm-ranlib main_llvm.a
% /opt/homebrew/opt/llvm/bin/clang++ -arch x86_64 -arch arm64 -o main_llvm main_llvm.a
ld: archive member 'main.cpp.o' not a mach-o file in '/Users/user/Documents/llvm_ranlib_issue/main_llvm.a'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
```

Note that running `lipo -info` on `main_llvm.a` suggests that there is a problem with the file:

```
% lipo -info main_xcode.a
Architectures in the fat file: main_xcode.a are: x86_64 arm64
% lipo -info main_llvm.a
fatal error: /Library/Developer/CommandLineTools/usr/bin/lipo: archive member main_llvm.a(main.cpp.o) is a fat file (not allowed in an archive)
```

Furthermore, running `llvm-lipo` crashes on `main_llvm.a`:

```
% /opt/homebrew/opt/llvm/bin/llvm-lipo -info main_xcode.a
Architectures in the fat file: main_xcode.a are: x86_64 arm64
% /opt/homebrew/opt/llvm/bin/llvm-lipo -info main_llvm.a
Non-fat file: main_llvm.a is architecture: PLEASE submit a bug report to https://github.com/Homebrew/homebrew-core/issues and include the crash backtrace.
Stack dump:
0.      Program arguments: /opt/homebrew/opt/llvm/bin/llvm-lipo -info main_llvm.a
 #0 0x00000001101b5d60 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/homebrew/Cellar/llvm/18.1.8/lib/libLLVM.dylib+0x4695d60)
 #1 0x00000001101b6134 SignalHandler(int) (/opt/homebrew/Cellar/llvm/18.1.8/lib/libLLVM.dylib+0x4696134)
 #2 0x0000000191e97584 (/usr/lib/system/libsystem_platform.dylib+0x180477584)
 #3 0x0000000102ab1420 (anonymous namespace)::createSliceFromIR(llvm::object::IRObjectFile const&, unsigned int) (/opt/homebrew/Cellar/llvm/18.1.8/bin/llvm-lipo+0x100009420)
 #4 0x0000000102ab1420 (anonymous namespace)::createSliceFromIR(llvm::object::IRObjectFile const&, unsigned int) (/opt/homebrew/Cellar/llvm/18.1.8/bin/llvm-lipo+0x100009420)
 #5 0x0000000102ab17b4 printBinaryArchs(llvm::LLVMContext&, llvm::object::Binary const*, llvm::raw_ostream&) (/opt/homebrew/Cellar/llvm/18.1.8/bin/llvm-lipo+0x1000097b4)
 #6 0x0000000102ab5434 printInfo(llvm::LLVMContext&, llvm::ArrayRef<llvm::object::OwningBinary<llvm::object::Binary>>) (/opt/homebrew/Cellar/llvm/18.1.8/bin/llvm-lipo+0x10000d434)
 #7 0x0000000102aad558 llvm_lipo_main(int, char**, llvm::ToolContext const&) (/opt/homebrew/Cellar/llvm/18.1.8/bin/llvm-lipo+0x100005558)
 #8 0x0000000102ab524c main (/opt/homebrew/Cellar/llvm/18.1.8/bin/llvm-lipo+0x10000d24c)
 #9 0x0000000191ade0e0
zsh: segmentation fault /opt/homebrew/opt/llvm/bin/llvm-lipo -info main_llvm.a
%
```

I hit this problem while trying to build my CMake project using clang from brew. Currently, I have to work around this by passing `-DCMAKE_RANLIB=/Library/Developer/CommandLineTools/usr/bin/ranlib` to my CMake configuration.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWEtv4zgS_jX0pWBDpiXZOvjgODEm2PQD3b2LvQWUVLY4TZFeknLi_fWLIuVnkp5BT3oPEwSGHlTVV_V9LBYpnJMbjThn2Q3Lbgei842x81ZWjUA1_F2Upens0BktrDOdrXBQmno_vwfRQiN2Um9ga02psHWgpP5OD8RGSO08rIUHlicjwfIEhK0auUNHwyt0Dmso9_RaqV07tEIrWdJguIfKdKoGi1tr6q5C8A0enIDRL78Bxmc7tE4aDePZaDyaMV4AQRBKYQ0su-kcASstPrHslvFZ4_3WscmC8RXjq7WxbacEjmjAyDWnR4yvyBfZMxraPXwQFQjb5im0omqkRjKS3LKk__3qhfXwJH0DAtZSIcFthdSjarslrOEVRbQ2SpknglUZ7VH7K0ssT_r_eMszqISHo63-6UTqSnU1Apssna-lGTVschffSh3HMx4ywqY3sLVS-3V4wL810oF08GRs5M0BPm-x8lgzPmbZUjPOGS_Y5AbY9PZ1WOH3c-SUjITQhD_wDU8NaojpZ3ly4mxtTQv_XpoaoTJtK3RN-kGocYfKbNGCN0ZFcO4C2h-mifGV2XrGV41pMXB-eBC5XJWUklWlhN4wfsP4DQwJLjzP8sc87W8iy0NzzPjIwLB6kf_g7kGWVtg946vbA3zGV8sY14PU-I1iYXzVOXv0Lyz8J9p7fK5MjSNx7orxnPH8p43HRF9Y_6UJik7e8DdifHV6E5__gfje1tonHTRmfIMWGqFrxpcngV1Vhkp0Dl34gKpTUBWshVTvpqLg8IxKun-LyT9t75y9aPDXkkdfvvSmaK4dJ3KLbYkWGJ-eYmN8Ctp4EKEaDk2seFLTKMZX_3RoozCDZG9N1bWoveuxPsYwH6VzHR4k0gPg04jhLAwCg9YaSxc9m4fSQZRiHYsrPksPQY1jWhk6hzDcEe8OCdvOVMJLo6mwva2yj8bTwiM82E7rg7jk1sBQ6rUhbcWl6Bx0noDrNht03sVvSaNIKhfHBexU_6W6XjxeUeHJ5Stza0HUeKx8Z9FR2g_Ft7d9WVyEDc96GQQBvO3nXAdr4YU6pf5nSxK5eEVQF6zPzrVVxMwdAiIyg9ho3cSa4hX6YO3HbK46S1S0xiJVi3NKaboFZFQtrHANuleZfd-C8f-i9a9gOpfAR6OHLxD0pY5IOkNMrz8_3C2-3oHrylZSdSi7DfVzxnqah5fN10b6pitHlSE4v51gHhAPq8DaKlQJBzTbDy0P5SVwBqWovnsrKhwd27DqO9Rduz3yloxYUny2ZmNFC8Ju-lIUBf0uSQLGJwkkz0n8G4-TcZnVeQLBzGTBJgu3d_HiM_VhAeU3gs347DTIiqdH47xF0Ya1YwlS-9DAUdv2EusSlRL2BPfQA69oEQy_Dw__-jCq9-H-JnlO84JwHecMAR9fAc_HkxS-yo0W6jeha0UzfPb-OMjNBQ5-hqMYYzHNZmnvMBaTaMztncc23sbrx60Sntr2MwfjWZJOycKFi8mZi4SLcpzysIcQ2uh9azoHWrTotoGXInJSWRQevypZ4cqa9v7LBWOm_B0rH6_vv3wKdysqWZXRzvckdjrsteqfZfNKhTFACqJI-SWX6d89wOw6wGmZxq3NjdTC7qmCuosASHlL2mc9H9C-Hlz8_hDW4nLg9cR8zxCn5aVI86sQs3TSh3hP_cefjW1hrdh_wTWbLF8P-NMTLYUx7DcHHV7f0f97hl2nV9N_ehm2qLNsFsJ5pA8f-91sENgSqoa8LV7wRN1Hn5Azgb4j7CzLZhewZ9ds8TTuB94xVTytLnwWF5VS1Jhg34381zW0rjnc0BoXul1Yi075d1vqGM9-0G7dQyOp-ZXu1PY2VC283YczAgNlJ1UN7R6WH8T3cLxDauv3caHpjycE4UQGlp21qL3aE8_30IgdkhHaO4KwptN19FbuYSvcYS84vF1-WPzj7vHL4uPD_Q2b3P61zTR1iN6cMFdGr-WmsyG_o0E9n9TFpBADnI-nfDwep1meD5p5iVitcxTrdI285MlsmhdiXBSYlGki8slAznnC02Q6zpMp52k-SoukLNOs4DiupsVsxtIEWyHVKDBg7GYQeqF5MSuK6UCJEpULB3ica3yCfjvFWXY7sPNAZdltHEsTJZ13JyteeoXz8w1nf-JGTedOKFlDp-UOrRPqeH436Kya_6CD63UUrPasHps3xlcR827O_xcAAP__XmtcrA">