File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 331 . [ Basic] ( basic/ )
441 . [ Lib-lib dependency] ( lib_lib_dependency/ )
551 . [ Symbol version] ( symbol_version/ )
6+ 1 . [ ABI] ( abi/ )
67
78Minimal example of a dynamic and static libraries.
89
Original file line number Diff line number Diff line change 1+ https://stackoverflow.com/questions/2171177/what-is-an-application-binary-interface-abi/54967743#54967743
Original file line number Diff line number Diff line change 1+ #! /usr/bin/env bash
2+ rm -rf v1/* .o v1/* .so v2/* .o v2/* .so * .out
Original file line number Diff line number Diff line change 1+ #include <assert.h>
2+ #include <stdlib.h>
3+
4+ #include "mylib.h"
5+
6+ int main (void ) {
7+ mylib_mystruct * myobject = mylib_init (1 );
8+ assert (myobject -> old_field == 1 );
9+ free (myobject );
10+ return EXIT_SUCCESS ;
11+ }
Original file line number Diff line number Diff line change 1+ #! /usr/bin/env bash
2+ set -eu
3+ cc=' gcc -pedantic-errors -std=c89 -Wall -Wextra'
4+ for d in v1 v2_bad v2_good; do
5+ $cc -fPIC -c -o " $d /mylib.o" " $d /mylib.c"
6+ $cc -L . -shared -o " $d /libmylib.so" " $d /mylib.o"
7+ done
8+ $cc -I v1 -L v1 -o main.out main.c -lmylib
9+ LD_LIBRARY_PATH=v1 ./main.out
10+ ! LD_LIBRARY_PATH=v2_bad ./main.out
11+ LD_LIBRARY_PATH=v2_good ./main.out
12+ $cc -I v2_bad -L v2_bad -o main.out main.c -lmylib
13+ LD_LIBRARY_PATH=v2_bad ./main.out
Original file line number Diff line number Diff line change 1+ #include <stdlib.h>
2+
3+ #include "mylib.h"
4+
5+ mylib_mystruct * mylib_init (int old_field ) {
6+ mylib_mystruct * myobject ;
7+ myobject = malloc (sizeof (mylib_mystruct ));
8+ myobject -> old_field = old_field ;
9+ return myobject ;
10+ }
Original file line number Diff line number Diff line change 1+ #ifndef MYLIB_H
2+ #define MYLIB_H
3+
4+ typedef struct {
5+ int old_field ;
6+ } mylib_mystruct ;
7+
8+ mylib_mystruct * mylib_init (int old_field );
9+
10+ #endif
Original file line number Diff line number Diff line change 1+ #include <stdlib.h>
2+
3+ #include "mylib.h"
4+
5+ mylib_mystruct * mylib_init (int old_field ) {
6+ mylib_mystruct * myobject ;
7+ myobject = malloc (sizeof (mylib_mystruct ));
8+ myobject -> old_field = old_field ;
9+ myobject -> new_field = 2 ;
10+ return myobject ;
11+ }
Original file line number Diff line number Diff line change 1+ #ifndef MYLIB_H
2+ #define MYLIB_H
3+
4+ typedef struct {
5+ int new_field ;
6+ int old_field ;
7+ } mylib_mystruct ;
8+
9+ mylib_mystruct * mylib_init (int old_field );
10+
11+ #endif
Original file line number Diff line number Diff line change 1+ #include <stdlib.h>
2+
3+ #include "mylib.h"
4+
5+ mylib_mystruct * mylib_init (int old_field ) {
6+ mylib_mystruct * myobject ;
7+ myobject = malloc (sizeof (mylib_mystruct ));
8+ myobject -> old_field = old_field ;
9+ myobject -> new_field = 2 ;
10+ return myobject ;
11+ }
You can’t perform that action at this time.
0 commit comments