#include <stdio.h>
#include <stdlib.h>
#if defined(PLATFORM_WIN)
#include <windows.h>
#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX)
#include <dlfcn.h>
#include <libgen.h>
#include <string.h>
#include <sys/param.h>
#define MAX_PATH PATH_MAX
#endif
#if defined(PLATFORM_WIN)
#define MODULE_SUFFIX ".dll"
#elif defined(PLATFORM_MAC)
#define MODULE_SUFFIX ".so"
#elif defined(PLATFORM_LINUX)
#define MODULE_SUFFIX ".so"
#endif
typedef void (*module_symbol)(void);
char bin_path[MAX_PATH + 1];
void CallModule(const char* module) {
char module_path[MAX_PATH + 1];
const char* module_function = "module_main";
module_symbol funcptr;
#if defined(PLATFORM_WIN)
HMODULE dl;
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
if (_splitpath_s(bin_path, drive, _MAX_DRIVE, dir, _MAX_DIR,
NULL, 0, NULL, 0)) {
fprintf(stderr, "Failed to split executable path.\n");
return;
}
if (_makepath_s(module_path, MAX_PATH, drive, dir, module, MODULE_SUFFIX)) {
fprintf(stderr, "Failed to calculate module path.\n");
return;
}
dl = LoadLibrary(module_path);
if (!dl) {
fprintf(stderr, "Failed to open module: %s\n", module_path);
return;
}
funcptr = (module_symbol) GetProcAddress(dl, module_function);
if (!funcptr) {
fprintf(stderr, "Failed to find symbol: %s\n", module_function);
return;
}
funcptr();
FreeLibrary(dl);
#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX)
void* dl;
char* path_copy = strdup(bin_path);
char* bin_dir = dirname(path_copy);
int path_size = snprintf(module_path, MAX_PATH, "%s/%s%s", bin_dir, module,
MODULE_SUFFIX);
free(path_copy);
if (path_size < 0 || path_size > MAX_PATH) {
fprintf(stderr, "Failed to calculate module path.\n");
return;
}
module_path[path_size] = 0;
dl = dlopen(module_path, RTLD_LAZY);
if (!dl) {
fprintf(stderr, "Failed to open module: %s\n", module_path);
return;
}
funcptr = dlsym(dl, module_function);
if (!funcptr) {
fprintf(stderr, "Failed to find symbol: %s\n", module_function);
return;
}
funcptr();
dlclose(dl);
#endif
}
int main(int argc, char *argv[])
{
fprintf(stdout, "Hello from program.c\n");
fflush(stdout);
#if defined(PLATFORM_WIN)
if (!GetModuleFileName(NULL, bin_path, MAX_PATH)) {
fprintf(stderr, "Failed to determine executable path.\n");
return 1;
}
#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX)
// Using argv[0] should be OK here since we control how the tests run, and
// can avoid exec and such issues that make it unreliable.
if (!realpath(argv[0], bin_path)) {
fprintf(stderr, "Failed to determine executable path (%s).\n", argv[0]);
return 1;
}
#endif
CallModule("lib1");
CallModule("lib2");
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
配套“编译v8引擎”文章使用
共2149个文件
svn-base:1012个
py:332个
gyp:294个
5星 · 超过95%的资源 需积分: 35 402 下载量 170 浏览量
2013-06-26
11:19:08
上传
评论 1
收藏 1.75MB RAR 举报
温馨提示
配套“编译v8引擎”文章使用 chrome浏览器js解析引擎 node.js
资源推荐
资源详情
资源评论
收起资源包目录
配套“编译v8引擎”文章使用 (2149个子文件)
override_asm.asm 277B
asm-function.assem 199B
AUTHORS 190B
somecmd.bat 265B
as.bat 226B
samples.bat 196B
gyp.bat 194B
go.bat 182B
bat with spaces.bat 182B
as.bat 55B
stuff.blah 18B
program.c 3KB
check-version-min.c 1KB
check-version-min.c 1KB
includes.c 552B
defines.c 462B
calculate.c 444B
prog2.c 430B
prog3.c 430B
prog1.c 430B
test.c 402B
prog3.c 398B
hello.c 380B
program.c 379B
b.c 375B
configurations.c 352B
main.c 349B
cflags.c 349B
program.c 344B
hello.c 322B
hello.c 322B
subdir_includes.c 315B
hello2.c 313B
test.c 298B
program.c 297B
hello.c 295B
prog2.c 293B
prog1.c 293B
precomp.c 277B
defines-escaping.c 266B
there.c 265B
hello.c 265B
hello.c 265B
main.c 262B
hello.c 261B
hello.c 261B
hello.c 260B
hello2.c 259B
valid_c.c 258B
file.c 247B
module.c 244B
configurations.c 244B
warn_about_missing_newline.c 242B
hello2.c 239B
configurations.c 234B
input_dirname.c 234B
program.c 232B
c.c 228B
test.input_root.c 228B
test.c 228B
test.c 228B
input_ext.c 226B
foo.c 225B
a.c 218B
b.c 213B
d.c 213B
c.c 212B
file.c 210B
a.c 209B
a.c 208B
mylib.c 198B
b3.c 195B
program.c 194B
program.c 190B
program.c 190B
gyp_dummy.c 190B
main.c 187B
main.c 187B
main.c 187B
main.c 187B
file.c 186B
file.c 186B
main.c 175B
main.c 173B
main.c 173B
prog5.c 172B
empty.c 171B
file_g.c 171B
file.c 171B
file_h.c 171B
lib1_moveable.c 165B
lib2_moveable.c 165B
prog4.c 164B
prog3.c 156B
lib1.c 152B
lib2.c 152B
lib2.c 150B
lib1.c 150B
program.c 150B
prog2.c 148B
共 2149 条
- 1
- 2
- 3
- 4
- 5
- 6
- 22
每天看一遍,防止恋爱&&堕落
- 粉丝: 715
- 资源: 63
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页