Разрешение зависимости в Linux

Помните, что исходные реализации C++ были просто как предварительный компилятор, которые производят код C для 'реального' компилятора. Все понятия C++ могут быть вручную кодированы (но не осуществлены компилятором) в плоскости C.

"C/C++" также допустим при обращении к компиляторам и другим инструментам языка/программирования. Фактически каждый доступный компилятор C++ скомпилирует любого - и таким образом упоминается как компиляторы "C/C++". Большинство имеет опции на том, рассматривать ли.C и.CPP файлы на основе расширения, или скомпилировать всех их как C или всех их как C++.

Также примечание, что смешивание C и источник C++ в единственном проекте компилятора было возможно из самого первого компилятора C/C++. Это - вероятно, ключевой фактор в стирании грани между языками.

Много инструментов языка/программирования, которые создаются для C++ также, работают над C, потому что синтаксис языка фактически идентичен. Много инструментов языка имеют отдельный Java, C#, версии Python - но у них есть единственная версия "C/C++", которая работает на C и C++ из-за сильных сходств.

8
задан James 13 July 2009 в 17:05
поделиться

4 ответа

Try:

ldd executable

For example:

[me@somebox ~]$ ldd /bin/ls
        linux-gate.so.1 =>  (0xb7f57000)
        librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7f4c000)
        libselinux.so.1 => /lib/libselinux.so.1 (0xb7f32000)
        libacl.so.1 => /lib/libacl.so.1 (0xb7f2b000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7ddc000)
        libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7dc4000)
        /lib/ld-linux.so.2 (0xb7f58000)
        libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7dc0000)
        libattr.so.1 => /lib/libattr.so.1 (0xb7dbb000)
[me@somebox ~]$ 

Note that this will only report shared libraries. If you need to find out what static libraries were linked in at compile time, that's a bit trickier, especially seeing as your executable is 'stripped' (no debugging symbols).

14
ответ дан 5 December 2019 в 07:12
поделиться

Use ldd. It will show the dynamic libraries the binary needs.

Note that the libraries themselves may in turn need more libraries. To get these, you can run ldd on the libraries you got from running ldd on the binary.

1
ответ дан 5 December 2019 в 07:12
поделиться

If you want something a little less raw than iteratively calling ldd and somewhat more like MSVC depends, you should try Visual-ldd. It hasn't been updated in 4 years, but it should still work given that the ELF format hasn't changed. It still won't show you individual symbols inside those libraries - for that you'll need something like nm, and I don't know of any GUI wrapper for that, unfortunately.

3
ответ дан 5 December 2019 в 07:12
поделиться

Use ldd

ldd /bin/sh
5
ответ дан 5 December 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: