gpt4 book ai didi

compiler-errors - 重定位被截断以适应错误 : R_X86_64_32 against symbol

转载 作者:行者123 更新时间:2023-12-04 07:01:24 24 4
gpt4 key购买 nike

我正在通过在 c++ 主程序中调用 java 函数来测试一个简单的 jni 示例(在 Windows 7 上)。

我读到“重定位被截断以适应”错误是由于一个大项目(不是这种情况:只是一个名为 Sample 的主类和一个编译的 java 类,带有静态方法 intMethod(int)),链接不同的目标文件顺序(我只有一个目标文件),或扩展映射方案... stack overflow thread

我使用以下编译命令行:g++ -D __int64="long long"-I"C:\Program Files\Java\jdk1.7.0_55\include"-I"C:\Program Files\Java\jdk1.7.0_55\include\win32"-L"C:\Program Files\Java\jdk1.7.0_55\lib"-o sample sample.cpp -ljvm

和我的主要功能:

#include <jni.h>
#include <cstring>
#ifdef _WIN32
#define PATH_SEPARATOR ';'
#else
#define PATH_SEPARATOR ':'
#endif

int main()
{
JavaVMOption options[1];
JNIEnv *env;
JavaVM *jvm;
JavaVMInitArgs vm_args;
long status;
jclass cls;
jmethodID mid;
jint square;
jboolean no;
options[0].optionString ="-Djava.class.path=.";

//memset(&vm_args, 0, sizeof(vm_args));
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 1;
vm_args.options = options;

status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
cls = env->FindClass("Sample");
mid = env->GetStaticMethodID(cls, "intMethod", "(I)I");
if(mid !=0)
{ square = env->CallStaticIntMethod(cls, mid);
printf("Result of intMethod: %d\n", square);
}
jvm->DestroyJavaVM();
return 0;
}

错误如下:

C:\Program Files\Java\jdk1.7.0_55\lib/jvm.lib(jvm.dll.b):(.text+0x2): relocation truncated to fit: R_X86_64_32 against symbol __imp_JNI_CreateJavaVM defined in section .idata$5 in C:\Program Files\Java\jdk1.7.0_55\lib/jvm.lib(jvm.dll.b)

error: collect2: ld returned 1 exit status

似乎无法在任何地方找到关于如何有条不紊地处理此错误的好答案!


-> 解决方案:编译中加入-L"C:\Program Files\Java\jdk1.7.0_55\jre\bin\server"

最佳答案

为了阐明编辑到问题中的解决方案,链接器命令行应包括 -L/path/to/jre/bin/server(其中包含 jvm.dll ).它不应包含 -L/path/to/jdk/lib(其中包含 jvm.lib)。

我不熟悉传统的 Windows 开发,所以我无法解释这里发生了什么。我假设提问者和我一样在 Cygwin 上工作。

请注意,您运行程序的内容 /path/to/jre/bin/server 也必须位于您的 PATH 中(与 具有相同的功能LD_LIBRARY_PATH 在 Linux 上)。

关于compiler-errors - 重定位被截断以适应错误 : R_X86_64_32 against symbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24369392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com