@@ -173,17 +173,6 @@ func init() {
173173}
174174
175175func init_ffi_invoke () {
176- loadModule := func (libpath string , modname string ) error {
177- var err error
178- var lib FFILibrary
179- lib , err = NewFFILibrary (libpath )
180- ErrPrint (err , lib )
181- // log.Println(lib)
182- if err == nil {
183- qtlibs [modname ] = lib
184- }
185- return err
186- }
187176
188177 // lib dir prefix
189178 // go arch name => android lib name
@@ -213,6 +202,9 @@ func init_ffi_invoke() {
213202 if len (dirs ) > 0 {
214203 return dirs [0 ] + fmt .Sprintf ("/lib/%s/" , archs [runtime .GOARCH ])
215204 }
205+ if FileExist (fmt .Sprintf ("/data/data/%s/lib/" , appdir )) {
206+ return fmt .Sprintf ("/data/data/%s/lib/" , appdir )
207+ }
216208 }
217209 return ""
218210 }
@@ -228,11 +220,23 @@ func init_ffi_invoke() {
228220 return fmt .Sprintf ("%slibQt5%s.%s" , dirp , modname , oslibexts ["linux" ])
229221 }
230222
223+ loadModule := func (libpath string , modname string ) error {
224+ var err error
225+ var lib FFILibrary
226+ lib , err = NewFFILibrary (libpath )
227+ ErrPrint (err , lib , libpath , modname )
228+ if err == nil {
229+ qtlibs [modname ] = lib
230+ }
231+ return err
232+ }
233+
231234 mods := []string {"Inline" }
232235 // TODO auto check static and omit load other module
233236 if ! UseWrapSymbols { // raw c++ symbols
234237 mods = append ([]string {"Core" , "Gui" , "Widgets" , "Network" , "Qml" , "Quick" , "QuickControls2" , "QuickWidgets" }, mods ... )
235238 }
239+
236240 for _ , modname := range mods {
237241 libpath := getLibFile (getLibDirp (), modname )
238242 loadModule (libpath , modname )
@@ -339,6 +343,9 @@ func ForwardFFIFunc(pxysymname string, symname string, args ...interface{}) (VRe
339343func isUndefinedSymbolErr (err error ) bool {
340344 return err != nil && strings .Contains (err .Error (), ": undefined symbol: " )
341345}
346+ func isNotfoundSymbolErr (err error ) bool {
347+ return err != nil && strings .Contains (err .Error (), "Symbol not found:" )
348+ }
342349
343350// 直接使用封装的C++ symbols。好像在这设置没有用啊,符号不同,因为参数表的处理也不同,还是要改生成的调用代码。
344351var UseWrapSymbols bool = true // see also qtrt.UseCppSymbols TODO merge
@@ -355,8 +362,8 @@ func GetQtSymAddr(symname string) unsafe.Pointer {
355362func GetQtSymAddrRaw (symname string ) unsafe.Pointer {
356363 for _ , lib := range qtlibs {
357364 addr , err := lib .Symbol (symname )
358- if ! isUndefinedSymbolErr (err ) {
359- ErrPrint (err , "" )
365+ if ! isUndefinedSymbolErr (err ) && ! isNotfoundSymbolErr ( err ) {
366+ ErrPrint (err , lib . Name (), symname )
360367 }
361368 if err != nil {
362369 continue
0 commit comments