Closed jonnjonnjo closed 2 months ago
You need to provide the argument command-line as '-Djava.library.path=.'.
Regarding the crash see https://github.com/tdlib/td/issues/2912#issuecomment-2156135946.
just to make sure, so what I need to do is basically recreate https://tdlib.github.io/td/build.html?language=Java but with having a modifiedd CMakeLists.txt, is that correct?
Yes, modifying CMakeLists.txt or downgrading MSVC is supposed to help.
Thank you, i want to make sure again. so , what i need to do is basically convert it into a .jar, add it to maven, and then then include the java.library.path in the command again ( referencing to where the .dll file are) into the arguments when running the springboot using ./mvnw spring-boot:run ?
Yes, after rebuilding you can pack the library in a .JAR file and use it in your project.
hello sir, could you help me again? just to really make sure again. so, i've to follow this instructions https://tdlib.github.io/td/build.html?language=Java, but changed the cmakelist just right after the first line, and then after that continue the installation.
after all the instruction is done, then i've to create jar using this command in the td root directory
jar cf tdlib.jar td
and after that, i've to include the jar into the pom. i also have to include the .dll using argument java.library.path when running the springboot using ./mvnw spring-boot:run, is that correct?
The first paragraph is correct.
I can't confirm exact steps for including the library in a springboot project.
i want to make sure again. everytime that i want to run the project with tdlib.jar being used inside of the java project, i must supply the java.library.path for the tdjni.dll in the script argument?
Yes. You can use only Java classes directly from .jar, so you need to ship tdjni.dll and its dependent libraries separately and provide java.library.path to be able to load them.
i'm kinda a little confused. after following the instructions in here https://tdlib.github.io/td/build.html?language=Java , do i've to follow the other instructions in here https://github.com/tdlib/td/tree/master/example/java ? like both of this
cd <path to TDLib sources> mkdir jnibuild cd jnibuild cmake -DCMAKE_BUILD_TYPE=Release -DTD_ENABLE_JNI=ON -DCMAKE_INSTALL_PREFIX:PATH=../example/java/td .. cmake --build . --target install
cd <path to TDLib sources> mkdir jnibuild cd jnibuild cmake -DCMAKE_BUILD_TYPE=Release -DTD_ENABLE_JNI=ON -DCMAKE_INSTALL_PREFIX:PATH=../example/java/td .. cmake --build . --target install
https://github.com/tdlib/td/tree/master/example/java contains generic description of the build process and https://tdlib.github.io/td/build.html?language=Java shows specific instructions for the chosen operating system. It is simpler to use https://tdlib.github.io/td/build.html?language=Java in most cases.
okay, thanks for answering. I think there are several unknown problem to me that I didn't know before ( like somehow the dlls is being imported twice or more in the runtime ).
Hi @jonnjonnjo , did you import tdlib to a spring boot project successful ? can you give me some tips
Yes, I do!
I think i got several errors.
make sure you follow the instructions and change the CMake just like what levlam asked. I literally just copied the whole instructions from https://tdlib.github.io/td/build.html?language=Java and from my experience, because I executed the whole sequence , i got error because sometimes my connection appeared to failed to clone the git and then my powershell proceed into executing the next task.
Make sure that there's no error in powershell when executing the job ( I got error because i don't have some libraries such as ssh, zlib, or something that i've to download independently )
from that on, you could go to td\tdlib\bin and then create the jar ( I kinda forgot whether to create .jar from directory td\tdlib\bin or td\tdlib\bin\org or td\tdlib\bin\org\drinkless ), just make sure that you also check the jar using jar tf
Add the tdlib dependency into your pom.xml, in my case, i created it just like this one
`
<artifactId>tdlib</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/tdlib.jar</systemPath>
</dependency>
and add the tdlib.jar into
src/main/resources/lib/` folder
inside of your td\tdlib\bin, there's several .dll classes that's libcrypto-3-x64, libssl-3-x64, tdjni , and zlib1. copy that into
src\main\resources\native\windows
2 out of 4 classes of that actually exist in C:\Windows\System32, i accidentally copied all of them so i "kinda" replaced the old .dll files to the C:\Windows\System32 ( i think you shouldn't follow this one )
run ./mvnw spring-boot:run '-Dspring-boot.run.jvmArguments="-Djava.library.path=src/main/resources/native/windows"'
. i run it from powershell
Hi @jonnjonnjo ,
I followed the tdlib instructions and run it successful, but could not import to other spring boot project.
in the tdlib example, i added maven to it then i have installed tdlib.jar to maven local repository (mvn clean install), then import it to my spring boot project in pom:
<dependency> <groupId>org.drinkless</groupId> <artifactId>tdlib</artifactId> <version>1.0.SNAPSHOT</version> </dependency>
but when compile my spring project, it said "could not find package org.drinkless.tdlib"
Yes, I do!
I think i got several errors.
- make sure you follow the instructions and change the CMake just like what levlam asked. I literally just copied the whole instructions from https://tdlib.github.io/td/build.html?language=Java and from my experience, because I executed the whole sequence , i got error because sometimes my connection appeared to failed to clone the git and then my powershell proceed into executing the next task.
- Make sure that there's no error in powershell when executing the job ( I got error because i don't have some libraries such as ssh, zlib, or something that i've to download independently )
- from that on, you could go to td\tdlib\bin and then create the jar ( I kinda forgot whether to create .jar from directory td\tdlib\bin or td\tdlib\bin\org or td\tdlib\bin\org\drinkless ), just make sure that you also check the jar using
jar tf
- Add the tdlib dependency into your pom.xml, in my case, i created it just like this one
<dependency> <groupId>org.drinkless</groupId> <artifactId>tdlib</artifactId> <version>1.0.0</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/lib/tdlib.jar</systemPath> </dependency>
and add the tdlib.jar intosrc/main/resources/lib/
folder- inside of your td\tdlib\bin, there's several .dll classes that's libcrypto-3-x64, libssl-3-x64, tdjni , and zlib1. copy that into
src\main\resources\native\windows
- 2 out of 4 classes of that actually exist in C:\Windows\System32, i accidentally copied all of them so i "kinda" replaced the old .dll files to the C:\Windows\System32 ( i think you shouldn't follow this one )
- run
./mvnw spring-boot:run '-Dspring-boot.run.jvmArguments="-Djava.library.path=src/main/resources/native/windows"'
. i run it from powershell
what is the expectation should show when use jar tf tdlib.jar bro @jonnjonnjo
@jonnjonnjo @levlam , the issue was resolved and build success when i comment out this plugins in file pom of tdlib project :):
i've a springboot and try to run
./mvnw spring-boot:run '-Dspring-boot.run.jvmArguments="-Djava.library.path=src/main/resources/native/windows/x64"'
the tdjni.dll path is in here
When i run the first script, i got
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffd34892f58, pid=17124, tid=5200
JRE version: Java(TM) SE Runtime Environment (21.0.3+7) (build 21.0.3+7-LTS-152) Java VM: Java HotSpot(TM) 64-Bit Server VM (21.0.3+7-LTS-152, mixed mode, emulated-client, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64) Problematic frame: C [msvcp140.dll+0x12f58]
No core dump will be written. Minidumps are not enabled by default on client versions of Windows
An error report file with more information is saved as: D:\College\Industrial Practices\socmed-service\hs_err_pid17124.log [4.569s][warning][os] Loading hsdis library failed
If you would like to submit a bug report, please visit: https://bugreport.java.com/bugreport/crash.jsp The crash happened outside the Java Virtual Machine in native code. See problematic frame for where to report the bug.
and then I tried to run this code in the tdjni.dll directory
java -Djava.library.path=. org.drinkless.MainClass
but, i got
Error: Could not find or load main class .library.path=.
Caused by: java.lang.ClassNotFoundException: /library/path=/
can anyone can help me in this?