TODO:[5] please fix all in free time
版本冲突的几个主要原因:
- 老项目会自己开发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
- 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).
- find definition
xxx
in header search path
ag -us "def.*xxx" /usr/include /usr/lib/gcc/x86_64-linux-gnu/11/include /usr/local/include
- After each updates(code changing), you should guarantee the benchmark(official makefile/simple testcase) compile maintain the correct compilation.
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
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
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:
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;
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:
/* TSJ 231009: add for the miss of definition of __THROW */
#include <x86_64-linux-gnu/sys/cdefs.h>
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
.
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;
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;
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;
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.
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.
# 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.
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.
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.
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);
}
...}
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: ???
/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,没有进行正确性的交叉校验。
无