我将类名存储在属性文件中.我知道类存储将实现IDynamicLoad.如何动态实例化该类?
现在我有
Properties foo = new Properties();
foo.load(new FileInputStream(new File("ClassName.properties")));
String class_name = foo.getProperty("class","DefaultClass");
//IDynamicLoad newClass = Class.forName(class_name).newInstance();
Run Code Online (Sandbox Code Playgroud)
newInstance只加载编译的.class文件吗?如何加载未编译的Java类?
System.load()和System.loadLibrary()java 之间有什么区别?
我想加载一个库,但我不想添加环境变量的路径.这些中的任何一个都有帮助吗?
我有一个listview,它是由Json从sqlite数据库中获取数据.
我希望把它变成,在滚动结束,"负载更多的物品",而装载更多的物品,并将它们添加到适配器(例如每次10个项目)列表中出现的页脚动态列表视图.我在实现此功能时遇到问题.请帮帮我.谢谢.
public class AllProductsActivity extends Activity {
... defining variables...;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new LoadAllProducts().execute();
}
class LoadAllProducts extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
... progress dialog...
}
protected String doInBackground(String... args) {
countryList = new ArrayList<Country>();
List<NameValuePair> params = new ArrayList<NameValuePair>();
JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);
Log.d("All Products: ", json.toString());
try {
// Checking for SUCCESS TAG
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// …Run Code Online (Sandbox Code Playgroud) 究竟是什么-rdynamic(或--export-dynamic在链接器级别)做什么以及它如何与由-fvisibility*标志或可见性pragmas和__attribute__s 定义的符号可见性相关?
对于--export-dynamic,ld(1)提到:
...如果使用"dlopen"加载需要引用程序定义的符号的动态对象,而不是某些其他动态对象,则在链接程序本身时可能需要使用此选项....
我不确定我完全明白这一点.能否请您提供一个例子,如果没有它可以工作-rdynamic但是没有它?
编辑:我实际上尝试编译了几个虚拟库(单个文件,多个文件,各种-O级别,一些函数间调用,一些隐藏符号,一些可见),有和没有-rdynamic,到目前为止我一直在字节相同的输出(当然保持所有其他标志不变),这是非常令人费解的.
我有一个现有的Haskell函数,它使用GHC API动态加载模块中的编译代码.它基于Haskell博客文章动态编译和模块加载的代码.
代码在GHC 7.0中运行良好,但必须稍加修改才能在GHC 7.2中编译,因为GHC API发生了变化.
代码现在在GHC 7.2中引发运行时错误:
mkTopLevEnv: not a home module (module name):(function name)
Run Code Online (Sandbox Code Playgroud)
代码是
evalfuncLoadFFI String moduleName,
String externalFuncName,
String internalFuncName = do
result <- liftIO $ defaultRunGhc $ do
dynflags <- GHC.getSessionDynFlags
_ <- GHC.setSessionDynFlags dynflags
m <- GHC.findModule (GHC.mkModuleName moduleName) Nothing
--------------------------------------------------------
-- The following code works fine in GHC 7.0.4:
--
-- GHC.setContext [] [(m, Nothing)]
--
-- This new code attempts to set context to the module,
-- but …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,其中一部分使用共享库.这些库在编译时链接.
在运行时,加载器期望共享对象在LD_LIBRARY_PATH,如果没有找到整个应用程序崩溃,错误"无法加载共享库".注意,不能保证客户端将拥有库,在这种情况下我想要应用程序留下合适的错误消息,独立部分也应该正常工作.
为此,我使用dlsym()并dlopen()在共享库中使用API.这个问题是如果我在API中有很多功能,我必须单独使用dlsym()和ptrs 访问它们,在我的情况下会导致内存损坏和代码崩溃.
这有什么替代方案吗?
我是Haskell的初学者,我正试图在'plugins'包中使用动态加载.我有点迷茫.这是一个包含两个文件的最小程序.
Main.hs:
module Main (main) where
import System.Plugins
main :: IO ()
main = do
putStrLn "Loading"
mv <- dynload "Plug.o" [] [] "thing" -- also try 'load' here
putStrLn "Loaded"
case mv of
LoadFailure msgs -> putStrLn "fail" >> print msgs
LoadSuccess _ v -> putStrLn "success" >> print (v::Integer)
Run Code Online (Sandbox Code Playgroud)
和Plug.hs:
module Plug (thing) where
thing :: Integer
thing = 1234000
Run Code Online (Sandbox Code Playgroud)
我编译Plug with ghc -c Plug.hs产生Plug.o. 然后我用ghc -o Main Main.hs,编译Main.hs ,然后运行Main.我也尝试更换load用dynload,并与运行runhaskell …
当安装程序运行加载测试时,我在尝试安装时readxl或haven在R(tidyverse编译后的两个依赖项)中不断收到以下错误:
** testing if installed package can be loaded
Error in dyn.load(file, DLLpath = DLLpath, ...) :
unable to load shared object '<my_lib_Path>/readxl/libs/readxl.so':
<my_lib_path>/readxl/libs/readxl.so: undefined symbol: libiconv
Error loading failed
Run Code Online (Sandbox Code Playgroud)
我有libiconv.so一个本地的lib路径(不适用于R软件包),它包含LD_LIBRARY_PATH在我的R会话中我已经验证了Sys.getenv("LD_LIBRARY_PATH")该目录.为什么R的动态库加载器不能找到这个共享对象? 是否有一个不同的R特定环境变量我需要定义以使R中的动态库加载器搜索我的本地lib路径?
请注意,这不是R库路径的问题,而是R包具有的非R依赖性.如果我正在编译和链接C++代码,gcc将使用ld,从而LD_LIBRARY_PATH跟踪动态依赖项.R似乎并不尊重这种相当常见的方法,而且我似乎无法找到有关如何管理这些更细粒度的依赖性问题的任何文档.
!> sessionInfo()
R version 3.3.3 (2017-03-06)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C …Run Code Online (Sandbox Code Playgroud) 我需要能够动态加载Haskell模块,并在动态加载模块的上下文中计算表达式.
提示做到了; 问题是,它至少在Windows上不适用于GHCi.
cygwin-bash> ghci HintTest.hs
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Ok, modules loaded: Main.
Prelude Main>
Prelude Main> main
[... lots of "Loading package" messages snipped]
GHCi runtime linker: fatal error: I found a duplicate definition for symbol
_debugLn
whilst processing object file
C:\PROGRAM FILES (X86)\HASKELL PLATFORM\2013.2.0.0\lib\ghc-prim-0.3.0.0\HSghc-prim-0.3.0.0.o
This could be caused by:
* Loading two …Run Code Online (Sandbox Code Playgroud) 分析这个问题,我dlopen在Linux上的动态加载()上下文中发现了一些关于弱符号解析行为的事情.现在我正在寻找管理这个的规范.
我们来举个例子吧.假设有一个程序a可以动态加载库b.so,并c.so按此顺序.如果c.so依赖于另外两个库foo.so(实际上libgcc.so在该示例中)和bar.so(实际上libpthread.so),则通常bar.so可以使用导出的符号来满足弱符号链接foo.so.但是,如果b.so还依赖foo.so但不依赖bar.so,那么这些弱的符号显然不会被联系起来bar.so.看起来好像foo.so墨水只是从a和b.so它们的所有依赖项中寻找符号.
这在某种程度上是有道理的,因为否则加载c.so可能会改变已经使用库的foo.so某些点的行为b.so.另一方面,在让我开始的问题中,这引起了相当多的麻烦,所以我想知道是否有办法解决这个问题.为了找到解决方法,我首先需要很好地理解在这些情况下如何指定符号解析的非常精确的细节.
在这些场景中定义正确行为的规范或其他技术文档是什么?
linux dynamic-linking dynamic-loading weak-linking symbol-table
dynamic-loading ×10
haskell ×3
java ×2
android ×1
c ×1
c++ ×1
dlsym ×1
elf ×1
gcc ×1
ghc ×1
ghc-api ×1
ghci ×1
linux ×1
listview ×1
module ×1
plugins ×1
r ×1
reflection ×1
symbol-table ×1
weak-linking ×1