java — ОШИБКА «неопределенной ссылки» в JVM 9, когда я вызываю самоопределяемую функцию-член в & quot; class os & quot;

Я взломал Исходный код JVM9, особенно class os часть.

То, что я пытаюсь сделать, это:

(1) добавить static int названный массив gc_tid[64] хранить некоторую информацию идентификатора потока.

(2) добавить static int nr_gc_tid; посчитать количество потоков выше

Итак, я только добавляю еще двух участников в class os Вот, аналогично предыдущему члену переменной
static size_t _page_sizes[page_sizes_max];.

(Все, что я сделал здесь, чтобы подражать как _page_sizes объявлен в os.hpp)

class os: AllStatic {
public:
...
static int  gc_tid[64];
static int nr_gc_tid;
...
};

Я также должен сделать инициализацию обоих nr_gc_tid а также gc_tid[64],

Итак, я пишу static void init_gc_tid(void) в
hotspot/src/share/vm/runtime/os.hpp до Вот как public функция-член.

static void init_gc_tid(void);

Затем я определяю эту функцию init_gc_tid(void) в hotspot/src/os/linux/vm/os_linux.cpp как раз перед void os::init(void) (Все, что я сделал здесь, чтобы подражать как os::init(void) объявлен в os.hpp и определяется в os_linux.cpp)

void os::init_gc_tid(void){
//step 1: init nr_gctid as 0
nr_gc_tid = 0;
//step 2: init all gc tid as -100
int i = 0;
for(i = 0; i < 64; ++i){
gc_tid[i] = -100;
}
}

Наконец я звоню init_gc_tid функция в os::init(void) после init_page_sizes((size_t) Linux::page_size()); Вот.

Но это не работает. Когда я make проект JVM9. Я получаю ошибки как

Note: Recompile with -Xlint:unchecked for details.
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Compiling 11 properties into resource bundles for java.logging
Compiling 3 files for COMPILE_CREATE_SYMBOLS
Compiling 11 properties into resource bundles for jdk.management.agent
Compiling 3 properties into resource bundles for jdk.jdi
Compiling 2 files for BUILD_BREAKITERATOR_BASE
Compiling 11 properties into resource bundles for jdk.jartool
Compiling 2 files for BUILD_BREAKITERATOR_LD
Compiling 4 properties into resource bundles for jdk.jlink
Compiling 3 properties into resource bundles for jdk.jlink
Compiling 1 properties into resource bundles for jdk.jlink
Compiling 224 properties into resource bundles for jdk.localedata
Creating buildtools/jdk.vm.compiler.replacements.verifier.jar
Compiling 6 properties into resource bundles for java.base
Compiling 11 properties into resource bundles for java.base
Creating ct.sym classes
Creating buildtools/jdk.vm.compiler.match.processor.jar
Creating support/symbols/ct.sym
Compiling 100 properties into resource bundles for java.desktop
Compiling 2897 files for java.base
/home/wxf/sandboxJDK/9jdk/build/linux-x86_64-normal-server-slowdebug/hotspot/variant-server/libjvm/objs/os_linux.o: In function `os::init_gc_tid()':
/home/wxf/sandboxJDK/9jdk/hotspot/src/os/linux/vm/os_linux.cpp:4726: undefined reference to `os::nr_gc_tid'
/home/wxf/sandboxJDK/9jdk/hotspot/src/os/linux/vm/os_linux.cpp:4730: undefined reference to `os::gc_tid'
collect2: error: ld returned 1 exit status
make[3]: *** [/home/wxf/sandboxJDK/9jdk/build/linux-x86_64-normal-server-slowdebug/support/modules_libs/java.base/server/libjvm.so] Error 1
lib/CompileJvm.gmk:207: recipe for target '/home/wxf/sandboxJDK/9jdk/build/linux-x86_64-normal-server-slowdebug/support/modules_libs/java.base/server/libjvm.so' failed
make[3]: *** Waiting for unfinished jobs....
/home/wxf/sandboxJDK/9jdk/build/linux-x86_64-normal-server-slowdebug/hotspot/variant-server/libjvm/objs/os_linux.o: In function `os::init_gc_tid()':
/home/wxf/sandboxJDK/9jdk/hotspot/src/os/linux/vm/os_linux.cpp:4726: undefined reference to `os::nr_gc_tid'
/home/wxf/sandboxJDK/9jdk/hotspot/src/os/linux/vm/os_linux.cpp:4730: undefined reference to `os::gc_tid'
collect2: error: ld returned 1 exit status
lib/CompileGtest.gmk:64: recipe for target '/home/wxf/sandboxJDK/9jdk/build/linux-x86_64-normal-server-slowdebug/hotspot/variant-server/libjvm/gtest/libjvm.so' failed
make[3]: *** [/home/wxf/sandboxJDK/9jdk/build/linux-x86_64-normal-server-slowdebug/hotspot/variant-server/libjvm/gtest/libjvm.so] Error 1
make/Main.gmk:263: recipe for target 'hotspot-server-libs' failed
make[2]: *** [hotspot-server-libs] Error 2
make[2]: *** Waiting for unfinished jobs....

ERROR: Build failed for target 'default (exploded-image)' in configuration 'linux-x86_64-normal-server-slowdebug' (exit code 2)
Stopping sjavac server

=== Output from failing command(s) repeated here ===
* For target hotspot_variant-server_libjvm_gtest_objs_BUILD_GTEST_LIBJVM_link:
/home/wxf/sandboxJDK/9jdk/build/linux-x86_64-normal-server-slowdebug/hotspot/variant-server/libjvm/objs/os_linux.o: In function `os::init_gc_tid()':
/home/wxf/sandboxJDK/9jdk/hotspot/src/os/linux/vm/os_linux.cpp:4726: undefined reference to `os::nr_gc_tid'
/home/wxf/sandboxJDK/9jdk/hotspot/src/os/linux/vm/os_linux.cpp:4730: undefined reference to `os::gc_tid'
collect2: error: ld returned 1 exit status
* For target hotspot_variant-server_libjvm_objs_BUILD_LIBJVM_link:
/home/wxf/sandboxJDK/9jdk/build/linux-x86_64-normal-server-slowdebug/hotspot/variant-server/libjvm/objs/os_linux.o: In function `os::init_gc_tid()':
/home/wxf/sandboxJDK/9jdk/hotspot/src/os/linux/vm/os_linux.cpp:4726: undefined reference to `os::nr_gc_tid'
/home/wxf/sandboxJDK/9jdk/hotspot/src/os/linux/vm/os_linux.cpp:4730: undefined reference to `os::gc_tid'
collect2: error: ld returned 1 exit status

* All command lines available in /home/wxf/sandboxJDK/9jdk/build/linux-x86_64-normal-server-slowdebug/make-support/failure-logs.
=== End of repeated output ===

=== Make failed targets repeated here ===
lib/CompileJvm.gmk:207: recipe for target '/home/wxf/sandboxJDK/9jdk/build/linux-x86_64-normal-server-slowdebug/support/modules_libs/java.base/server/libjvm.so' failed
lib/CompileGtest.gmk:64: recipe for target '/home/wxf/sandboxJDK/9jdk/build/linux-x86_64-normal-server-slowdebug/hotspot/variant-server/libjvm/gtest/libjvm.so' failed
make/Main.gmk:263: recipe for target 'hotspot-server-libs' failed
=== End of repeated output ===

Hint: Try searching the build log for the name of the first failed target.
Hint: If caused by a warning, try configure --disable-warnings-as-errors.

/home/wxf/sandboxJDK/9jdk/make/Init.gmk:291: recipe for target 'main' failed
make[1]: *** [main] Error 2
/home/wxf/sandboxJDK/9jdk/make/Init.gmk:185: recipe for target 'default' failed
make: *** [default] Error 2

Я выделяю часть ошибки:

неопределенная ссылка на `os :: nr_gc_tid ‘

неопределенная ссылка на `os :: gc_tid ‘

0

Решение

Этот пост помогает,
ошибка связи статической переменной

добавлять

int os:: gc_tid[64];
int os:: nr_gc_tid;

в начале os_linux.cpp файл

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]