abicompat - 클라우드의 온라인

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 공급자에서 실행할 수 있는 명령 abicompat입니다.

프로그램:

이름


abicompat - ABI 호환성 확인

abicompat는 주어진 공유 라이브러리에 대해 링크하는 응용 프로그램이 여전히
ABI는 해당 라이브러리의 후속 버전과 호환됩니다. 새 버전의 경우
라이브러리가 ABI 비호환성을 도입한 다음 abicompat는 사용자에게 정확히 무엇을 암시합니다.
그 비호환성이다.

기도


abicompat [옵션] [ ]

옵션


· --도움

명령에 대한 간단한 도움말을 표시하고 종료합니다.

· --번역 | -v

프로그램 버전을 표시하고 종료합니다.

· --목록 정의되지 않은 기호 | -u

응용 프로그램의 정의되지 않은 기호 목록을 표시하고 종료합니다.

· --표시-베이스 이름 | -b

도구에서 내보낸 결과 보고서에서 이 옵션은 응용 프로그램과
라이브러리는 기본 이름으로만 참조됩니다. 완전한 이름이 아닙니다. 이것
응용 프로그램의 이름을 비교하려는 스크립트에서 유용할 수 있습니다.
디렉토리 이름이 무엇인지 독립적으로 라이브러리.

· --앱-디버그-정보-디렉터리

응용 프로그램의 디버그 정보가 있는 디렉터리의 경로를 설정합니다.
배치되어야 한다고 합니다. 이것은 디버그가 필요한 애플리케이션 바이너리에 유용합니다.
info는 별도의 파일 세트에 있습니다.

· --lib-디버그-정보-dir1

첫 번째 버전의 디버그 정보가 있는 디렉터리의 경로를 설정합니다.
공유 라이브러리가 배치되어야 합니다. 이것은 공유 라이브러리에 유용합니다.
디버그 정보가 별도의 파일 세트에 있는 바이너리.

· --lib-디버그-정보-dir2

두 번째 버전의 디버그 정보가 있는 디렉터리의 경로를 설정합니다.
공유 라이브러리가 배치되어야 합니다. 이것은 공유 라이브러리에 유용합니다.
디버그 정보가 별도의 파일 세트에 있는 바이너리.

· --no-show-locs
위치에 대한 정보를 표시하지 않음 공유 도서관 각각
유형이 변경되었습니다.

· --약한 모드

이것은 약한 모드를 트리거합니다. 아비컴퍼트. 이 모드에서는 한 가지 버전의
라이브러리가 필요합니다. 즉, abicompat는 다음과 같이 호출됩니다.

abicompat --weak 모드

참고로 --약한 모드 하나의 버전만 있는 경우 옵션을 생략할 수도 있습니다.
응용 프로그램과 함께 라이브러리가 제공됩니다. 그 경우, 아비컴퍼트 자동적으로
약한 모드에서 작동하도록 스위치:

아비컴퍼트

이 약한 모드에서 라이브러리에서 내보낸 함수 및 변수의 유형과
응용 프로그램에 의해 소비됩니다(이러한 함수 및 변수의 기호에서와 같이
응용 프로그램에서 정의되지 않고 라이브러리에서 정의 및 내보냄)
애플리케이션에서 예상한 이러한 유형의 버전과 비교합니다. 그리고 만약 이것들이
두 가지 버전의 유형이 다릅니다. 아비컴퍼트 차이점이 무엇인지 사용자에게 알려줍니다.
있다.

즉, 이 모드에서는 아비컴퍼트 함수의 유형과
라이브러리에서 내보낸 변수는 응용 프로그램과 동일한 의미입니다.
ABI에 관한 한 예상합니다.

참고로 이 모드에서는 아비컴퍼트 내보낸 함수 또는 변수를 감지하지 않습니다.
(기호) 응용 프로그램에서 예상하지만 라이브러리에서 제거됩니다.
그렇기 때문에 약한 방법.

RETURN Values


종료 코드 아비컴퍼트 명령은 바이너리의 ABI가
비교는 동일하거나 다르거나 도구에 오류가 발생한 경우 XNUMX이 아닙니다.

후자의 경우 종료 코드는 각 비트에
구체적인 의미.

값이 1인 첫 번째 비트는 ABIDIFF_ERROR 오류가 있음을 의미합니다.

값 2의 두 번째 비트는 다음과 같이 명명됩니다. ABIDIFF_USAGE_ERROR 방법에 오류가 있음을 의미합니다.
사용자가 도구를 호출했습니다. 예를 들어 사용자가 도구를 호출한 경우 설정될 수 있습니다.
알 수 없는 명령줄 스위치, 잘못된 번호 또는 인수 등으로 이 비트가
설정한 다음 ABIDIFF_ERROR 비트도 설정해야 합니다.

값 4의 세 번째 비트는 다음과 같습니다. ABIDIFF_ABI_CHANGE 바이너리의 ABI를 의미합니다.
비교하면 다릅니다.

값 8의 네 번째 비트는 다음과 같이 명명됩니다. ABIDIFF_ABI_INCOMPATIBLE_CHANGE 의 ABI를 의미합니다.
비교되는 바이너리는 호환되지 않는 방식으로 다릅니다. 이 비트가 설정되면
ABIDIFF_ABI_CHANGE 비트도 설정해야 합니다. 만약 ABIDIFF_ABI_CHANGE 설정되고
ABIDIFF_INCOMPATIBLE_CHANGE is 않습니다. 설정하면 비교되는 ABI가
또는 호환되지 않을 수 있습니다. 이 경우 인간은 ABI 변경 사항을 검토해야 합니다.
호환되는지 여부를 결정합니다.

나머지 비트는 현재 사용되지 않습니다.

사용법 사용 예


· 새 공유 라이브러리 버전에서 가능한 ABI 비호환성 감지:

$ 고양이 -n test0.h
1 구조체 푸
삼 {
3 정수 m0;
4
5 푸()
6 : m0()
7{}
8};
9
10푸*
11 첫 번째_func();
12
13 무효
14초_펑크(푸&);
15
16 무효
17화
$

$ 고양이 -n test-app.cc
1 // 컴파일:
2 // g++ -g -벽 -o 테스트 앱 -L. -ltest-0 test-app.cc
3
4 # "test0.h" 포함
5
6 정수
7 메인()
삼 {
9 foo* f = first_func();
10초_함수(*f);
11 반환 0;
12}
$

$ 고양이 -n test0.cc
1 // 다음과 같이 컴파일합니다.
2 // g++ -g -벽 -공유 -o libtest-0.so test0.cc
3
4 # "test0.h" 포함
5
6푸*
7 첫 번째_함수()
삼 {
9 foo* f = 새로운 foo();
10 반환 f;
11}
12
13 무효
14초_func(foo&)
삼 {
16}
17
18 무효
19화
삼 {
21}
$

$ 고양이 -n test1.h
1 구조체 푸
삼 {
3 정수 m0;
4자 m1; /* <-- 여기에 새 멤버가 추가되었습니다! */
5
6 푸()
7 : m0(),
8m1()
9{}
10};
11
12푸*
13 첫 번째_func();
14
15 무효
16초_펑크(푸&);
17
18 무효
19화
$

$ 고양이 -n test1.cc
1 // 다음과 같이 컴파일합니다.
2 // g++ -g -벽 -공유 -o libtest-1.so test1.cc
3
4 # "test1.h" 포함
5
6푸*
7 첫 번째_함수()
삼 {
9 foo* f = 새로운 foo();
10 반환 f;
11}
12
13 무효
14초_func(foo&)
삼 {
16}
17
18 /* third_func()의 정의를 주석 처리하자
19 무효
20화
삼 {
22}
23*/
$

· 라이브러리의 첫 번째 및 두 번째 버전을 컴파일합니다. libtest-0.so
libtest-1.so:

$ g++ -g -벽 -공유 -o libtest-0.so test0.cc
$ g++ -g -벽 -공유 -o libtest-1.so test1.cc

· 응용 프로그램을 컴파일하고 라이브러리의 첫 번째 버전에 대해 링크합니다.
생성 테스트 앱 바이너리:

$ g++ -g -벽 -o 테스트 앱 -L. -ltest-0.so test-app.cc

· 이제 사용 아비컴퍼트 libtest-1.so가 ABI와 앱과 호환되는지 확인하기 위해
libtest-0.so의 ABI:

$ abicompat 테스트 앱 libtest-0.so libtest-1.so
ELF 파일 'test-app'은 아래 'libtest-1.so'와의 차이점으로 인해 'libtest-0.so'와 ABI 호환되지 않을 수 있습니다.
기능 변경 사항 요약: 0 제거, 2 변경, 0 추가 기능
변수 변경 요약: 0 제거됨, 0 변경됨, 0 추가된 변수

간접적인 하위 유형 변경이 있는 2개의 함수:

[C]'function foo* first_func()'에는 간접적인 하위 유형 변경 사항이 있습니다.
반환 유형 변경됨:
'struct foo' 유형을 가리킵니다.
크기가 32비트에서 64비트로 변경됨
1 데이터 멤버 삽입:
오프셋 1에서 'char foo::m32'(비트 단위)
[C]'function void second_func(foo&)'에 간접적인 하위 유형 변경 사항이 있습니다.
'foo&' 유형의 매개변수 0에 하위 유형 변경 사항이 있습니다.
참조된 유형 'struct foo'가 이전에 보고된 대로 변경되었습니다.

$

· 이제 abicompat의 약한 모드, 즉 응용 프로그램과
라이브러리의 새 버전:

$ abicompat --weak-mode 테스트-앱 libtest-1.so
라이브러리에 정의된 함수
'libtest-1.so'
응용 프로그램과 다른 하위 유형이 있습니다.
'테스트 앱'
예상:

함수 foo* first_func():
반환 유형 변경됨:
'struct foo' 유형을 가리킵니다.
크기가 32비트에서 64비트로 변경됨
1 데이터 멤버 삽입:
오프셋 1에서 'char foo::m32'(비트 단위)

$

onworks.net 서비스를 사용하여 온라인으로 abicompat 사용



최신 Linux 및 Windows 온라인 프로그램