相关疑难解决方法(0)

未明确引用'dlsym'和'dlopen'

我正在使用arm-linux-gnueabi-g ++ 4.7.3版进行编译.

我在位置安装了arm-linux-gnueabi库:

/ usr/arm-linux-gnueabi/lib,它包含libdl.a,libdl.so,libdl.so.2和libdl-2.19.so.

libdl.so链接到libdl.so.2,链接到libdl-2.19.so.

我试图链接到dl库(请参阅下面的命令字符串),但我总是得到未定义的引用错误.

arm-linux-gnueabi-g++ -I. -I../ -I../Comms/Linux  -Wall -DLINUX -fpic -o ../../work/MyProgram main.o
-L../../work -L/usr/arm-linux-gnueabi/lib -lComms -lConsole -lUtilities -ldl
../../work/libUtilities.so: undefined reference to `dlsym'
../../work/libUtilities.so: undefined reference to `dlopen'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

如果我使用g ++ 4.8.2使用以下命令编译,那么我的程序编译,链接和执行正常.

g++ -I. -I../ -I../Comms/Linux  -Wall -DLINUX -fpic -o ../../work/MyProgram main.o
-L../../work -lComms -lConsole -lUtilities -ldl
Run Code Online (Sandbox Code Playgroud)

显然它找不到libdl.so库; 我认为通过使用-L标志将路径添加到相应库的位置将解决问题,但事实并非如此.

我对ARM编译器命令缺少什么?

c++ linux arm shared-libraries undefined-reference

7
推荐指数
1
解决办法
2万
查看次数

是否可以调用C函数,并将其名称作为字符串?

我在其中一个C拼图中看到了这个问题!! 这真的有可能吗?

如果将其名称作为字符串,我该如何调用函数?是否可以使用scanf读取的字符串直接用于调用函数?

我已经想到了if(strcmp(str,"string"))然后调用该函数.

但还有其他方法吗?

c function

6
推荐指数
3
解决办法
6246
查看次数

D中的变量函数调用

好的,这就是我需要的:

  • 假设我们有一个字符串变量,例如func有一些值,由用户给出(不是常数)
  • 我们怎么能调用一个名称是值的函数func

更新:

也许我认为我需要的是非常明显的,但是因为我注意到许多downvotes,你在这里:

string func = "myfunc";
Run Code Online (Sandbox Code Playgroud)

我需要一些call(func)会打电话的东西myfunc.像PHP的call_user_func_array()


有任何想法吗?

我看了一下mixins,但这看起来并不像我需要的那样.


PS我标注的问题与cc++太,因为一个通用的解决方案可能是理论上的可能,考虑到语言之间的相似之处.

c c++ d

5
推荐指数
1
解决办法
130
查看次数

GCC -rdynamic不能使用静态库

为什么-rdynamic不导出.a文件中的符号,而是导出.o文件中的符号?

我在.so文件中有一个应用程序和一个插件.主应用程序使用一系列目标文件和一个静态库链接,如下所示:

CXXFLAGS =      $(CXXFLAGS_COMMON) -rdynamic
STATICLIBS =    ../Utilities/Utilities.a
...

all:
    $(CXX) $(CXXFLAGS) -o $(SAMPLE) main.o $(STATICLIBS) $(SHAREDLIBS) $(INCLUDES)
Run Code Online (Sandbox Code Playgroud)

(CXX是Ubunut上的g ++ 4.5.2,我主要使用-std = c ++ Ox进行编译)

在这种情况下,不导出Utilities.a中的符号(即"objdump -t a.out | grep symbol"为空).

如果我使用"ar x"来仅仅使用.o来提取.a和.链接中的.o文件,那么这些符号将被插件导出并找到(如果你想知道的话加载了dlopen).

我尝试过使用-Wl,-export-dynamic但没有成功.

如上所述,我确实有一个解决方法,但我仍然希望了解我所缺少的内容.提前致谢 !

gcc dynamic-linking static-libraries

4
推荐指数
1
解决办法
5334
查看次数

isDefined函数?

在C++中,有任何函数在定义变量时返回"true",反之亦然.像这样的东西:

bool isDefined(string varName)
{
    if (a variable called "varName" is defined)
      return true;
    else
      return false;
}
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
2
解决办法
1290
查看次数

如何从STDIN读取C函数并在程序中运行?

我想编写一个从stdin读取的程序:scanf("%s %s", foo, args);然后使用参数运行函数foo(之前在程序中定义): foo(args);我不知道如何在C中执行此操作.我之前可以很容易地在Shell中做到这一点,但在C中似乎很难

c

0
推荐指数
1
解决办法
292
查看次数

C有一个允许动态函数调用的变通方法吗?

我已经读过 C不支持动态函数调用.我的程序有越来越多的测试用例作为单独的函数实现,如 -

int testcase1(void);
int testcase2(void);
int testcase3(void);
Run Code Online (Sandbox Code Playgroud)

每次我添加一个新的测试用例时,我还必须将调用添加到我的主函数中,如:

int main(int argc, char **argv){
  assert(!testcase1());
  assert(!testcase2());
  assert(!testcase3());
}
Run Code Online (Sandbox Code Playgroud)

我更愿意调用类似于assert(!testcase*())*匹配任何解析为我的程序中的有效函数名称的字符串.

你能想到一个更方便的解决方案吗?

c function dynamic

0
推荐指数
1
解决办法
179
查看次数