C Program Compile Problems
TODO:[5] please fix all in free time 重复了和另一篇
Overview¶
版本冲突的几个主要原因:
- 老项目会自己开发New func & macro/definitions
- New sys-header also develop new func & macro/definitions
- Conflict1: redefinition of the same macro/definitions. 大家都需要某个功能,老项目原本自己写了这部分代码。随着时间的发展 merge 到了sys-file。old project compile in new sys with the diff code conflict for same purpose.
- FIX: delete the old project code, and use the sys
STL
- FIX: delete the old project code, and use the sys
- Conflict2: New sys develop a new func(e.g.,
__THROW
) in it's header files, part sys header(e.g,iostream
) is included by old project, but the definition of new func is not included for lower search priority.- FIX: update old project to support the new func (because you can not degrade the sys-files).
tricks¶
- find definition
xxx
in header search path
- After each updates(code changing), you should guarantee the benchmark(official makefile/simple testcase) compile maintain the correct compilation.
1¶
compile multipim with pin3.28 under g++11
/usr/include/x86_64-linux-gnu/c++/11/bits/os_defines.h:44:19: error: missing binary operator before token "("
4| #if __GLIBC_PREREQ(2,15) && defined(_GNU_SOURCE)
- SO(StackOverflow) show similar errors, I guess the
Gabriel Devillers
answer the key point, self head file's higher priority lead to the no define of__GLIBC_PREREQ()
- I successfully found head file in directory
PIN/extras/crt/include/features.h
- fix by remove or adjust the head file searching order?
- just rename to
feature_bk.h
- just rename to
1.1¶
In file included from pin/extras/crt/include/sys/cdefs.h:84,
from pin/extras/crt/include/features.h:33,
from pin/extras/cxx/include/__config:228,
from pin/extras/cxx/include/string:510,
from build/opt/g_std/g_string.h:31,
from build/opt/access_tracing.h:29,
from build/opt/access_tracing.cpp:26:
/usr/include/x86_64-linux-gnu/sys/cdefs.h:146:55: error: missing binary operator before token "("
146 | #if __USE_FORTIFY_LEVEL == 3 && (__glibc_clang_prereq (9, 0) \
| ^
We find the definition
# shaojiemike @ icarus0 in ~/github/MultiPIM_icarus0 on git:main x [16:45:13] C:2
$ ag -us "__glibc_clang_prereq" /usr/include ./pin ./common ./build/opt /usr/lib/gcc/x86_64-linux-gnu/11/include /usr/local/include
/usr/include/features.h
179:# define __glibc_clang_prereq(maj, min) \
182:# define __glibc_clang_prereq(maj, min) 0
413:# elif _FORTIFY_SOURCE > 2 && (__glibc_clang_prereq (9, 0) \
TODO: maybe include_next
in pin/extras/crt/include/features.h
2¶
during the officail pintool compilation of pin2.14 under g++11
#if !defined(__GXX_ABI_VERSION) || CC_USED_ABI_VERSION != __GXX_ABI_VERSION
#error The C++ ABI of your compiler does not match the ABI of the pin kit.
#endif
TODO:
3¶
compile multipim with pin3.28 under g++11 after adding crt include path.
In file included from /usr/include/c++/11/bits/localefwd.h:40,
from /usr/include/c++/11/string:43,
from build/opt/g_std/g_string.h:31,
from build/opt/access_tracing.h:29,
from build/opt/access_tracing.cpp:26:
/usr/include/x86_64-linux-gnu/c++/11/bits/c++locale.h: In function 'int std::__convert_from_v(const __c_locale&, char*, int, const char*, ...)':
/usr/include/x86_64-linux-gnu/c++/11/bits/c++locale.h:75:16: error: variable 'std::__c_locale __old' has initializer but incomplete type
75 | __c_locale __old = __gnu_cxx::__uselocale(__cloc);
| ^~~~~
/usr/include/x86_64-linux-gnu/c++/11/bits/c++locale.h:75:47: error: cannot convert 'const __c_locale' to 'locale_t' {aka '__locale_t*'}
75 | __c_locale __old = __gnu_cxx::__uselocale(__cloc);
| ^~~~~~
| |
| const __c_locale
/usr/include/x86_64-linux-gnu/c++/11/bits/c++locale.h:52:34: note: initializing argument 1 of '__locale_t* __gnu_cxx::__uselocale(locale_t)'
52 | extern "C" __typeof(uselocale) __uselocale;
| ^~~~~~~~~~~
error: initializer but incomplete type is caused by compiler-think undefined type.
But the define is just before lines typedef __locale_t __c_locale;
And found the conflict defined
# shaojiemike @ icarus0 in ~/github/MultiPIM_icarus0/pin on git:main x [9:56:26]
$ ag __locale_t
extras/crt/include/xlocale.h
33:struct __locale_t;
34:typedef struct __locale_t* locale_t;
replace these two lines to std header file
struct __locale_struct
{
/* Note: LC_ALL is not a valid index into this array. */
struct __locale_data *__locales[13]; /* 13 = __LC_LAST. */
/* To increase the speed of this solution we add some special members. */
const unsigned short int *__ctype_b;
const int *__ctype_tolower;
const int *__ctype_toupper;
/* Note: LC_ALL is not a valid index into this array. */
const char *__names[13];
};
typedef struct __locale_struct *__locale_t;
typedef __locale_t locale_t;
4¶
In file included from /usr/include/c++/11/cstdlib:75,
from /usr/include/c++/11/ext/string_conversions.h:41,
from /usr/include/c++/11/bits/basic_string.h:6608,
from /usr/include/c++/11/string:55,
from build/opt/g_std/g_string.h:31,
from build/opt/access_tracing.h:29,
from build/opt/access_tracing.cpp:26:
/usr/include/stdlib.h:97: note: this is the location of the previous definition
97 | #define MB_CUR_MAX (__ctype_get_mb_cur_max ())
|
/usr/include/stdlib.h:98:45: error: expected initializer before '__THROW'
98 | extern size_t __ctype_get_mb_cur_max (void) __THROW __wur;
| ^~~~~~~
This shows error of the definition the __THROW
. Ensure that the __THROW
macro is correctly defined or included in your code.
$ ag -us "def.*__THROW" /usr/include ./pin ./common ./build/opt /usr/lib/gcc/x86_64-linux-gnu/11/include /usr/local/include
/usr/include/x86_64-linux-gnu/sys/cdefs.h
79:# define __THROW __attribute__ ((__nothrow__ __LEAF))
80:# define __THROWNL __attribute__ ((__nothrow__))
86:# define __THROW noexcept (true)
88:# define __THROW throw ()
So __THROW
is defined in /usr/include/x86_64-linux-gnu/sys/cdefs.h
Stupid idea is to sudo vim the sys-header stdlib.h
add codes:
4.1¶
In file included from build/opt/pin_cmd.cpp:30:
/usr/include/wordexp.h:66:45: error: expected initializer before '__THROW'
66 | extern void wordfree (wordexp_t *__wordexp) __THROW;
| ^~~~~~~
# wordexp.h -> <features.h> -> sys/cdefs.h
The more likely scenario is pin-def cdefs.h
lack the definition of macro __THROW
$ ag -usg "cdefs\.h" /usr/include ./pin ./common ./build/opt /usr/lib/gcc/x86_64-linux-gnu/11/include /usr/local/include
/usr/include/bsd/sys/cdefs.h
/usr/include/x86_64-linux-gnu/sys/cdefs.h
pin/extras/crt/include/sys/cdefs.h
It's a bad idea to include_next
which lead to 7.1
error.
The easy solution is to degrade the wordexp.h
with remove the only one macro __THROW
.
5¶
In file included from pin/source/include/pin/pin.H:27,
from build/opt/decoder.h:31,
from build/opt/core.h:30,
from build/opt/ooo_core.h:34,
from build/opt/contention_sim.cpp:35:
pin/extras/components/include/util/intel-fp.hpp: At global scope:
pin/extras/components/include/util/intel-fp.hpp:21:9: error: 'UINT64' does not name a type; did you mean 'UINT64_C'?
21 | UINT64 _significand; ///< The floating-point significand.
| ^~~~~~
| UINT64_C
Type is not defined, include to fix
# shaojiemike @ icarus0 in ~/github/MultiPIM_icarus0 on git:main x [16:16:38]
$ ag ' UINT64;'
pin/extras/crt/include/types.h
70:typedef unsigned __int64 UINT64;
86:typedef uint64_t UINT64;
5.1¶
In file included from build/opt/debug_zsim.cpp:28:
/usr/include/gelf.h:70:9: error: 'Elf64_Section' does not name a type; did you mean 'Elf64_Ssize'?
70 | typedef Elf64_Section GElf_Section;
| ^~~~~~~~~~~~~
| Elf64_Ssize
We found the definition
# shaojiemike @ icarus0 in ~/github/MultiPIM_icarus0 on git:main x [15:57:57] C:2
$ ag -us "Elf64_Section" /usr/include ./pin ./common ./build/opt /usr/lib/gcc/x86_64-linux-gnu/11/include /usr/local/include
/usr/include/gelf.h
70:typedef Elf64_Section GElf_Section;
/usr/include/elf.h
52:typedef uint16_t Elf64_Section;
532: Elf64_Section st_shndx; /* Section index */
the reason is header higher search priority
$ ag -usg "elf.h" /usr/include ./pin ./common ./build/opt /usr/lib/gcc/x86_64-linux-gnu/11/include /usr/local/include
/usr/include/gelf.h
/usr/include/elf.h
pin/extras/crt/include/elf.h
pin/extras/crt/include/freebsd/3rd-party/sys/x86/include/elf.h # used by pin/extras/crt/include/elf.h
We can not just add #include_next
in pin's elf.h
due the redefined of many structs.
We fix it by add missing macro definitions in suitable header file pin/extras/crt/include/freebsd/3rd-party/include/elf.h
/* Type for section indices, which are 16-bit quantities. */
typedef uint16_t Elf32_Section;
typedef uint16_t Elf64_Section;
6¶
In file included from pin/source/include/pin/pin.H:96,
from build/opt/decoder.h:32,
from build/opt/decoder.cpp:26:
pin/source/include/pin/gen/ins_api_xed_ia32.PH:65:27: error: reference to 'USIZE' is ambiguous
65 | extern PIN_DEPRECATED_API USIZE INS_MemoryWriteSize(INS ins);
| ^~~~~
conflict define in current path header and search path header, select one to comment.
# shaojiemike @ icarus0 in ~/github/MultiPIM_icarus0 on git:main x [16:39:02]
$ ag ' USIZE;' pin
pin/extras/crt/include/types.h
122:typedef ADDRINT USIZE;
pin/source/include/pin/gen/types_foundation.PH
41:typedef unsigned int USIZE;
6.1¶
In file included from build/opt/slab_alloc.h:43,
from build/opt/event_recorder.h:32,
from build/opt/cache.cpp:29:
build/opt/mutex.h: At global scope:
build/opt/mutex.h:56:30: error: reference to 'mutex' is ambiguous
56 | class aligned_mutex : public mutex {} ATTR_LINE_ALIGNED;
| ^~~~~
In file included from pin/extras/cxx/include/mutex:190,
from pin/extras/cxx/include/__locale:18,
from pin/extras/cxx/include/ios:215,
from pin/extras/cxx/include/iostream:37,
from build/opt/memory_hierarchy.h:32,
from build/opt/cache_arrays.h:29,
from build/opt/cache.h:29,
from build/opt/cache.cpp:26:
pin/extras/cxx/include/__mutex_base:32:78: note: candidates are: 'class std::__1::mutex'
32 | class _LIBCPP_TYPE_VIS _LIBCPP_THREAD_SAFETY_ANNOTATION(capability("mutex")) mutex
| ^~~~~
In file included from build/opt/slab_alloc.h:43,
from build/opt/event_recorder.h:32,
from build/opt/cache.cpp:29:
build/opt/mutex.h:34:7: note: 'class mutex'
34 | class mutex : public GlobAlloc {
| ^~~~~
It seems the class redefine, we comment pintool part code to fix it.
7¶
In file included from pin/extras/cxx/include/mutex:190,
from pin/extras/cxx/include/__locale:18,
from pin/extras/cxx/include/ios:215,
from pin/extras/cxx/include/iostream:37,
from build/opt/memory_hierarchy.h:32,
from build/opt/access_tracing.h:30,
from build/opt/access_tracing.cpp:26:
pin/extras/cxx/include/__mutex_base: In member function 'void std::__1::condition_variable::__do_timed_wait(std::__1::unique_lock<std::__1::mutex>&, std::__1::chrono::time_point<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long int, std::__1::ratio<1, 1000000000> > >)':
pin/extras/cxx/include/__mutex_base:508:16: error: 'pthread_cond_clockwait' was not declared in this scope; did you mean 'pthread_cond_wait'?
508 | int __ec = pthread_cond_clockwait(&__cv_, __lk.mutex()->native_handle(), CLOCK_MONOTONIC, &__ts);
| ^~~~~~~~~~~~~~~~~~~~~~
| pthread_cond_wait
After Reading header file, It seem compiler believe system contain the function.
TODO: 阅读system header file 的include和底层代码实现: 线程,print,syscall。e.g., pthread_cond_clockwait
function is defined where
# shaojiemike @ icarus0 in ~/github/MultiPIM_icarus0 on git:main x [15:10:32]
$ ag pthread_cond_clockwait /usr/include
/usr/include/pthread.h
1171:extern int pthread_cond_clockwait (pthread_cond_t *__restrict __cond,
Of course,We assume pin/extras/crt/include/pthread.h
has higher include priority. We will prove it in the later.
# the exsit include
$ ag pthread.h pin/extras/cxx
pin/extras/cxx/include/__threading_support
32:# include <pthread.h>
# So who include __threading_support
$ ag __threading_support pin/extras/cxx
pin/extras/cxx/include/__mutex_base # the error header
16:#include <__threading_support>
Reading __threading_support
code, the include under a #ifdef
condition
#if defined(_LIBCPP_HAS_THREAD_API_PTHREAD)
# include <pthread.h>
...
#elif defined(_LIBCPP_HAS_THREAD_API_C11)
# include <threads.h>
#endif
So which file define _LIBCPP_HAS_THREAD_API_PTHREAD
$ ag -u _LIBCPP_HAS_THREAD_API_PTHREAD
pin/extras/cxx/include/__config
1134: !defined(_LIBCPP_HAS_THREAD_API_PTHREAD) && \
1149:# define _LIBCPP_HAS_THREAD_API_PTHREAD
1152:# define _LIBCPP_HAS_THREAD_API_PTHREAD
1160:#if defined(_LIBCPP_HAS_THREAD_API_PTHREAD)
1170:#if defined(_LIBCPP_HAS_NO_THREADS) && defined(_LIBCPP_HAS_THREAD_API_PTHREAD)
1171:#error _LIBCPP_HAS_THREAD_API_PTHREAD may only be defined when \
1199:#if (defined(_LIBCPP_HAS_THREAD_API_PTHREAD) && defined(__GLIBC__)) \
# second one define it
# and find #include <__config> in the error header
According to -MMD
option's result .d
file, we make sure include the pin/extras/cxx/include/__config
one.
And add #warning
preprocessor directive or check -MD
option result to make sure include <pthread.h>
. But the point is include pin/extras/crt/include/pthread.h
First Idea: I believe that changing the potentially buggy Pin crt
code is a bad idea. The more likely scenario is that we are using the crt
incorrectly. So, let's identify how to trigger the bug starting from build/opt/memory_hierarchy.h:32
, and then replicate it in a simple pintool to verify whether we are indeed using it incorrectly.
But the real situation is pintool just #include <iostream>
and the simple pintool also include without compilation error. Weird scenario deserves more research.
7.1¶
# pass
# shaojiemike @ icarus0 in ~/github/MultiPIM_icarus0/pin/source/tools/ManualExamples on git:main x [10:02:19]
$ g++ -Wall -Werror -Wno-unknown-pragmas -DPIN_CRT=1 -fno-stack-protector -DTARGET_IA32E -DHOST_IA32E -fPIC -DTARGET_LINUX -fabi-version=2 -I../../../sou
rce/include/pin -I../../../source/include/pin/gen -isystem /staff/shaojiemike/Download/pin-3.28-98749-g6643ecee5-gcc-linux/extras/cxx/include -isystem /staff/shaojiemike/Download/pin-3.28-98749-g6643ecee5-gcc-linux/extras/crt/include -isystem /staff/shaojiemike/Download/pin-3.28-98749-g6643ecee5-gcc-linux/extras/crt/include/arch-x86_64 -isystem /staff/shaojiemike/Download/pin-3.28-98749-g6643ecee5-gcc-linux/extras/crt/include/kernel/uapi -isystem /staff/shaojiemike/Download/pin-3.28-98749-g6643ecee5-gcc-linux/extras/crt/include/kernel/uapi/asm-x86 -I../../../extras/components/include -I../../../extras/xed-int
el64/include/xed -I../../../source/tools/Utils -I../../../source/tools/InstLib -O3 -fomit-frame-pointer -MD -c inscount0.cpp
# failed
# shaojiemike @ icarus0 in ~/github/MultiPIM_icarus0/pin/source/tools/ManualExamples on git:main x [10:02:53]
$ g++ -Wall -Werror -Wno-unknown-pragmas -DPIN_CRT=1 -fno-stack-protector -DTARGET_IA32E -DHOST_IA32E -fPIC -DTARGET_LINUX -fabi-version=2 -I../../../sou
rce/include/pin -I../../../source/include/pin/gen -isystem /staff/shaojiemike/github/MultiPIM_icarus0/pin/extras/cxx/include -isystem /staff/shaojiemike/github/MultiPIM_icarus0/pin/extras/crt/include -isystem /staff/shaojiemike/github/MultiPIM_icarus0/pin/extras/crt/include/arch-x86_64 -isystem /staff/shaojiemike/github/MultiPIM_icarus0/pin/extras/crt/include/kernel/uapi -isystem /staff/shaojiemike/github/MultiPIM_icarus0/pin/extras/crt/include/kernel/uapi/asm-x86 -I../../../extras/components/include -I../../../extras/xed-intel64/include/xed -I../../../source/tools/Utils -I../../../source/tools/InstLib -O3 -fomit-frame-pointer -MD -c inscount0.cpp
In file included from /staff/shaojiemike/github/MultiPIM_icarus0/pin/extras/cxx/include/mutex:190,
from /staff/shaojiemike/github/MultiPIM_icarus0/pin/extras/cxx/include/__locale:18,
from /staff/shaojiemike/github/MultiPIM_icarus0/pin/extras/cxx/include/ios:215,
from /staff/shaojiemike/github/MultiPIM_icarus0/pin/extras/cxx/include/iostream:37,
from inscount0.cpp:6:
/staff/shaojiemike/github/MultiPIM_icarus0/pin/extras/cxx/include/__mutex_base: In member function 'void std::__1::condition_variable::__do_timed_wait(std::__1::unique_lock<std::__1::mutex>&, std::__1::chrono::time_point<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long int, std::__1::ratio<1, 1000000000> > >)':
/staff/shaojiemike/github/MultiPIM_icarus0/pin/extras/cxx/include/__mutex_base:508:16: error: 'pthread_cond_clockwait' was not declared in this scope; did you mean 'pthread_cond_wait'?
508 | int __ec = pthread_cond_clockwait(&__cv_, __lk.mutex()->native_handle(), CLOCK_MONOTONIC, &__ts);
| ^~~~~~~~~~~~~~~~~~~~~~
| pthread_cond_wait
After the compile compare, we decide the error is due to our change in pin code.
But we just change a little.
# shaojiemike @ icarus0 in ~/github/MultiPIM_icarus0 on git:main x [10:09:58]
$ diff /staff/shaojiemike/Download/pin-3.28-98749-g6643ecee5-gcc-linux pin
diff '--color=auto' -r /staff/shaojiemike/Download/pin-3.28-98749-g6643ecee5-gcc-linux/extras/crt/include/features.h pin/extras/crt/include/features.h
32a33
> #include_next <features.h>
diff '--color=auto' -r /staff/shaojiemike/Download/pin-3.28-98749-g6643ecee5-gcc-linux/extras/crt/include/freebsd/3rd-party/include/elf.h pin/extras/crt/include/freebsd/3rd-party/include/elf.h
42a43,46
> /* Type for section indices, which are 16-bit quantities. */
> typedef uint16_t Elf32_Section;
> typedef uint16_t Elf64_Section;
>
diff '--color=auto' -r /staff/shaojiemike/Download/pin-3.28-98749-g6643ecee5-gcc-linux/extras/crt/include/sys/cdefs.h pin/extras/crt/include/sys/cdefs.h
44a45
>
82a84,114
> #include_next <sys/cdefs.h>
>
>
> /* GCC can always grok prototypes. For C++ programs we add throw()
> to help it optimize the function calls. But this only works with
> gcc 2.8.x and egcs. For gcc 3.4 and up we even mark C functions
> as non-throwing using a function attribute since programs can use
> the -fexceptions options for C code as well. */
> // # if !defined __cplusplus \
> // && (__GNUC_PREREQ (3, 4) || __glibc_has_attribute (__nothrow__))
> // # define __THROW __attribute__ ((__nothrow__ __LEAF))
> // # define __THROWNL __attribute__ ((__nothrow__))
> // # define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct
> // # define __NTHNL(fct) __attribute__ ((__nothrow__)) fct
> // # else
> // # if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major >= 4)
> // # if __cplusplus >= 201103L
> // # define __THROW noexcept (true)
> // # else
> // # define __THROW throw ()
> // # endif
> // # define __THROWNL __THROW
> // # define __NTH(fct) __LEAF_ATTR fct __THROW
> // # define __NTHNL(fct) fct __THROW
> // # else
> // # define __THROW
> // # define __THROWNL
> // # define __NTH(fct) fct
> // # define __NTHNL(fct) fct
> // # endif
> // # endif
Rollback two include_next to pass the benchmark.
8¶
In file included from pin/extras/cxx/include/limits.h:57,
from pin/extras/cxx/include/climits:41,
from pin/extras/cxx/include/ratio:82,
from pin/extras/cxx/include/chrono:830,
from pin/extras/cxx/include/__threading_support:15,
from pin/extras/cxx/include/atomic:579,
from pin/extras/cxx/include/memory:687,
from pin/extras/cxx/include/algorithm:653,
from pin/extras/cxx/include/__string:57,
from pin/extras/cxx/include/string_view:179,
from pin/extras/cxx/include/string:511,
from build/opt/g_std/g_string.h:31,
from build/opt/access_tracing.h:29,
from build/opt/access_tracing.cpp:26:
build/opt/common/global_const.h:32:16: error: expected unqualified-id before numeric constant
32 | const unsigned PAGE_SIZE=(1UL<<PAGE_SHIFT);
| ^~~~~~~~~
Ref suggest us to test the macro define
In file included from build/opt/common/common_structures.h:20,
from build/opt/memory_hierarchy.h:39,
from build/opt/access_tracing.h:30,
from build/opt/access_tracing.cpp:26:
build/opt/common/global_const.h:33:2: error: #error "PAGE_SIZE is defined"
33 | #error "PAGE_SIZE is defined"
| ^~~~~
and we find the redefined in
# shaojiemike @ icarus0 in ~/github/MultiPIM_icarus0 on git:main x [10:28:46]
$ ag -u "define PAGE_SIZE"
pin/extras/crt/include/limits.h
124:#define PAGE_SIZE 4096
pin/extras/crt/include/kernel/uapi/linux/a.out.h
120:#define PAGE_SIZE 0x400
FIX: set #ifdef
in old pintool code.
9 ld¶
During the zsim-like multipim compilation, dumptrace
g++ -o build/opt/dumptrace -Wl,-R/staff/shaojiemike/github/MultiPIM_icarus0/common/libconfig/lib -L/usr/lib/x86_64-linux-gnu/hdf5/serial/ build/opt/dumptrace.ot build/opt/access_tracing.ot build/opt/memory_hierarchy.ot build/opt/config.ot build/opt/galloc.ot build/opt/log.ot build/opt/pin_cmd.ot -Lcommon/libconfig/lib -lconfig++ -lhdf5 -lhdf5_hl
/usr/bin/ld: build/opt/dumptrace.ot: in function `std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string<decltype(nullptr)>(char const*)':
/staff/shaojiemike/github/MultiPIM_icarus0/pin/extras/cxx/include/string:841: undefined reference to `std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long)'
After reading the code, template
function init
denifition seems no problem. So the first judgement is this is due to the new pin lib missing.
9.1 : crude solution¶
Copy all missing lib from inscount0.so
g++ -o build/opt/dumptrace -Wl,--hash-style=sysv /staff/shaojiemike/github/MultiPIM_icarus0/pin/intel64/runtime/pincrt/crtbeginS.o -Wl,-Bsymbolic -Wl,--version-script=/staff/shaojiemike/github/MultiPIM_icarus0/pin/source/include/pin/pintool.ver -fabi-version=2 -Wl,-R/staff/shaojiemike/github/MultiPIM_icarus0/common/libconfig/lib -L/staff/shaojiemike/github/MultiPIM_icarus0/pin/intel64/runtime/pincrt -L/staff/shaojiemike/github/MultiPIM_icarus0/pin/intel64/lib -L/staff/shaojiemike/github/MultiPIM_icarus0/pin/intel64/lib-ext -L/staff/shaojiemike/github/MultiPIM_icarus0/pin/extras/xed-intel64/lib -L/usr/lib/x86_64-linux-gnu/hdf5/serial/ build/opt/dumptrace.ot build/opt/access_tracing.ot build/opt/memory_hierarchy.ot build/opt/config.ot build/opt/galloc.ot build/opt/log.ot build/opt/pin_cmd.ot -Lcommon/libconfig/lib -lconfig++ -lhdf5 -lhdf5_hl -lpin -lxed /staff/shaojiemike/github/MultiPIM_icarus0/pin/intel64/runtime/pincrt/crtendS.o -lpindwarf -ldl-dynamic -nostdlib -lc++ -lc++abi -lm-dynamic -lc-dynamic -lunwind-dynamic
which lead error
/usr/bin/ld: build/opt/config.ot: undefined reference to symbol '__cxa_get_exception_ptr@@CXXABI_1.3.1'
/usr/bin/ld: /lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
forget add -shared
option to eliminate the error msg, but the I guess build/opt/dumptrace
is an excutable, because the code
int main(int argc, const char* argv[]) {
InitLog(""); //no log header
if (argc != 2) {
info("Prints an access trace");
info("Usage: %s <trace>", argv[0]);
exit(1);
}
...}
9.2 pick in details¶
dumptrace
is executable and inscount0.so
is a dynamic library. We should analyse the lack part.
First we try to delete part and lower pin-lib priority
g++ -o build/opt/dumptrace -Wl,-R/staff/shaojiemike/github/MultiPIM_icarus0/common/libconfig/lib -L/usr/lib/x86_64-linux-gnu/hdf5/serial/ build/opt/dumptrace.ot build/opt/access_tracing.ot build/opt/memory_hierarchy.ot build/opt/config.ot build/opt/galloc.ot build/opt/log.ot build/opt/pin_cmd.ot -Lcommon/libconfig/lib -lconfig++ -lhdf5 -lhdf5_hl -L/staff/shaojiemike/github/MultiPIM_icarus0/pin/intel64/runtime/pincrt -L/staff/shaojiemike/github/MultiPIM_icarus0/pin/intel64/lib -L/staff/shaojiemike/github/MultiPIM_icarus0/pin/intel64/lib-ext -L/staff/shaojiemike/github/MultiPIM_icarus0/pin/extras/xed-intel64/lib -lpin -lxed -lpindwarf -ldl-dynamic -nostdlib -lc++ -lc++abi -lm-dynamic -lc-dynamic -lunwind-dynamic
which alse error with __cxa_get_exception_ptr@@CXXABI_1.3.1
and error adding symbols: DSO missing from command line
TODO: ???
9.3¶
/usr/bin/ld: build/opt/dumptrace.ot: in function `AccessTraceReader::read()':
/staff/shaojiemike/github/MultiPIM_icarus0/build/opt/access_tracing.h:70: undefined reference to `__assert2'
需要进一步的研究学习¶
暂无
遇到的问题¶
暂无
开题缘由、总结、反思、吐槽~~¶
参考文献¶
上面回答部分来自ChatGPT-3.5,没有进行正确性的交叉校验。
无